Тип указателя this
Тип указателя this в объявлении функции можно изменить при помощи ключевых слов const и volatile. Для того чтобы объявить функцию с атрибутами, имеющими одно или оба этих ключевых слова, добавьте нужные ключевые слова после списка аргументов функции.
Рассмотрим следующий пример.
// type_of_this_pointer1.cpp
class Point
{
unsigned X() const;
};
int main()
{
}
В приведенном выше примере объявляется функция-член X, в которой указатель this обрабатывается как указатель const на объект const. Можно указать список-модификаторов-const-volatile, но эти модификаторы всегда изменяют объект, на который указывает указатель this, а не сам указатель this. Таким образом, в следующем примере объявляется функция X; указатель this является указателем const и указывает на объект const:
// type_of_this_pointer2.cpp
class Point
{
unsigned X() const;
};
int main()
{
}
Тип указателя this в функции-члене описывается следующим синтаксисом, где список-модификаторов-const-volatile определяется исходя из декларатора функций-членов и может иметь модификатор const или volatile (или оба одновременно), а тип-класса означает имя класса:
[список-квалификаторов-const-volatile] тип-класса * const this
Иными словами, указатель this всегда является указателем const и не может быть переназначен. Квалификаторы const и volatile, используемые в объявлении функции-члена, действуют на экземпляр класса, на который указатель this указывает в области видимости функции.
В следующей таблице приведены дополнительные сведения о том, как работают эти модификаторы.
Значение модификаторов
Модификатор |
Значение |
---|---|
const |
Не может менять данные-члены. Не может вызывать функции-члены, которые не имеют модификатора const. |
volatile |
Данные-члены загружаются из памяти при каждом обращении. Ряд оптимизаций отключается. |
Передать объект const функции-члену без квалификатора const будет ошибкой. Аналогично, ошибкой будет передать объект volatile функции-члену без модификатора volatile.
Функции-члены, объявленные как const, не могут изменять данные-члены — в этих функциях указатель this является указателем на объект const.
Примечание
Конструкторы и деструкторы не могут объявляться как const или volatile.Однако их можно вызывать для объектов const и volatile.