Подтвердить что ты не робот

Тип "this" в С++?

struct Foo
{
 void f()
 {
 // (*)
 }
};

Каков тип "this" в строке, помеченной (*)?

Это const Foo * или Foo *?

4b9b3361

Ответ 1

n3376 9.3.2/1

В теле нестатической (9.3) функции-члена ключевое слово this представляет собой выражение prvalue, значение которого это адрес объекта, для которого вызывается функция.

Тип этого в членной функции класс X является X *. Если функция-член объявлена ​​const, тип этого является const X *, если член функция объявлена ​​volatile, тип которой является изменчивым X *, и если объявлена ​​функция-член const volatile, тип этого - константа volatile X *.

Ответ 2

Внутри f, this имеет тип Foo *, потому что f не является функцией члена const.

Вы не можете вызвать f для объекта const Foo. Следующие ошибки ошибочны:

 const Foo obj;
 obj.f();

Именно поэтому внутри Foo::f указатель this имеет значение Foo *, а не const Foo *, поэтому вызов функции требует преобразования указателя, который отбрасывает квалификатор.

Указатель this сам по себе не является переменной. Он не присваивается, но не из-за квалификатора const. В области видимости нет описания, например Foo *const this. A this выражение просто не является значением lvalue, как правило, для языка.

Указатель this не очень отличается от &obj.

Ответ 3

Тип этого зависит от функции-члена.

Например, для класса X, если функции-члены

1) const, Тогда это имеет тип const X *

2) volatile, тогда это volatile X * и т.д.

в противном случае X *

Ответ 4

this относится к текущему объекту. Тип this в С++ - Foo *const.