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

Какие особые правила применимы к оператору унитарного оператора?

Существуют ли специальные правила, применимые к унарным и оператору?

Например, код:

#include <iostream>
struct X
{
    X() {}
    void* operator &() { return NULL; }
};
int main()
{
    const X x;
    std::cout << &x << std::endl;
    X y;
    std::cout << &y;
}

выводит вывод

0xbfbccb33
0

Я знал, что это будет компилироваться и запускаться так же из-за обсуждения, которое я имел здесь раньше, но разве я не знал этого, я ожидал, что это не скомпилируется, потому что operator & не объявлено const.

Итак, похоже, что компилятор генерирует operator &() const независимо от того, перегружен ли operator &() или нет. Хорошо, это имеет смысл, особенно с образцом и выходом.

Вопрос: , где это поведение подробно описано в стандарте?

Я не ищу ответы, которые повторяют то, что я уже сказал в вопросе, поэтому, пожалуйста, не объясняйте, как мой перегруженный оператор нельзя вызвать в объекте const, потому что я уже это знаю.

4b9b3361

Ответ 1

n3337 13.3.1.2/9

Если оператор является оператором, унарным оператором &, либо оператором → , а нет жизнеспособных функций, то оператор считается встроенным оператором и интерпретируется в соответствии с пунктом 5.