Почему нельзя получить адрес указателя this?
Почему нельзя получить адрес указателя this?
class Hu {
public:
void ps() {
}
};
int main()
{
Hu s;
s.ps();
}
Компилятор неявно передаёт адрес объекта, который вызывает метод следующим образом:
ps(&s)
Почему я не могу получить адрес указателя?
class Hu {
public:
Hu** ps() {
return &this;
}
};
Ответы (1 шт):
Значение указателя this имеет категорию prvalue и у неё нельзя получить адрес.
стандарт :
If a declaration declares a member function or member function template of a class X, the expression this is a prvalue of type “pointer to cv-qualifier-seq X” between the optional cv-qualifier-seq and the end of the function-definition, member-declarator , or declarator .
ссылка на категории :
При выполнении метода класса, автоматически не создаётся место в памяти для этого указателя, а передаётся адрес любым способом на усмотрение компилятора.
Этот указатель имеет ту-же категорию, как например и & var, у которого тоже нельзя получить адрес : & & var - ошибка.