В теле нестатической (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.