Поделиться через


Тип указателя 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.

См. также

Ссылки

Указатель this