Пространства имён
Варианты
Действия

this pointer

Материал из cppreference.com
< cpp‎ | language

 
 
Язык С++
Общие темы
Управление программой
Операторы условного выполнения
Операторы повторения
Операторы перехода
Функции
объявление функции
объявление лямбда-функции
шаблон функции
спецификатор inline
спецификаторы исключений (устарело)
спецификатор noexcept (C++11)
Исключения
Пространства имён
объявление пространства имён
псевдонимы пространства имён
Типы
спецификатор decltype (C++11)
Спецификаторы
cv-спецификаторы
спецификаторы продолжительности хранения
спецификатор constexpr (C++11)
спецификатор auto (C++11)
спецификатор alignas (C++11)
Инициализация
Литералы
Выражения
Утилиты
Типы
typedef-объявление
объявление псевдонима типа (C++11)
атрибуты (C++11)
Приведения типов
неявные преобразования
const_cast-преобразование
static_cast-преобразование
dynamic_cast-преобразование
reinterpret_cast-преобразование
C-подобное и функциональное приведение типов
Выделение памяти
Классы
Особые свойства классовых функций
Специальные функции-члены
Шаблоны
шаблон класса
шаблон функции
специализация шаблона
упакованные параметры (C++11)
Разное
Ассемблерные вставки
 
Внутрь не статические функции-члены, содержит указатель на объект класса, из которого функция была вызвана.
Оригинал:
Inside non-static member function, holds a pointer to the class object from which the function was invoked.
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Тип указателя this является cv T* const где T это имя класса и cv относится к резюме спецификаторов функции используется указатель дюйма Например:
Оригинал:
The type of this pointer is cv T* const where T is the class name and cv refers to the резюме спецификаторов of the function the pointer is used in. For example:
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Function signature Type of this
void T::foo()                T* const this;
void T::foo() const          const T* const this;
void T::foo() volatile       volatile T* const this;
void T::foo() const volatile const volatile T* const this;

[править] Пример

class T
{
    int x;
 
    void foo()
    {
        this->x = 5; // this used explicitly
        x = 6; // same as this->x = 6;
    }
 
    void foo() const
    {
        this->x = 7; // Error: *this is constant
    }
 
    void foo ( int x )
    {
        // parameter x shadows the attribute with the same name
        this->x = x; // unqualified x refers to the parameter, but the attribute is still accessible using the this pointer
    }
 
    T& operator= ( const T& b )
    {
        x = b.x;
        return *this; // this is often used when a reference to the current object is needed
    }
 
    void bar ( const T& b )
    {
        // two ways to call class operators using this
        (*this) = b;
        this->operator= ( b );
    }
 
    void bar()
    {
       // methods can be called even when there's no object
       // the this pointer can be seen like an additional parameter implicitly passed
       if ( this == NULL )
          return;
    }
};
 
T* pointer = reinterpret_cast<T*>(123);
pointer->bar(); // bar is called with 123 (0x7B) as value for this