Существуют ли специальные правила, применимые к унарным и оператору?
Например, код:
#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
, потому что я уже это знаю.