Почему нельзя получить адрес указателя this?

Почему нельзя получить адрес указателя this?

class Hu {
public:
    void ps() {
        
    }
};

int main()
{
    Hu s;
    s.ps();
}

Компилятор неявно передаёт адрес объекта, который вызывает метод следующим образом:

ps(&s)

Почему я не могу получить адрес указателя?

class Hu {
public:
    Hu** ps() {
      return &this;
    }
};

Ответы (1 шт):

Автор решения: AlexGlebe

Значение указателя 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 .

ссылка на категории :

Value categories

При выполнении метода класса, автоматически не создаётся место в памяти для этого указателя, а передаётся адрес любым способом на усмотрение компилятора. Этот указатель имеет ту-же категорию, как например и & var, у которого тоже нельзя получить адрес : & & var - ошибка.

→ Ссылка