単項 & 演算子に適用される特別なルールはありますか?
たとえば、コードは次のとおりです。
#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
オブジェクトで呼び出せない方法を説明しないでください。