私が名前を挙げない C++ コンパイラでは、int *p = &42; というリテラルのアドレスを取得できます。
明らかに 42 は右辺値であり、ほとんどのコンパイラはこれを拒否しています。
なぜコンパイラはこれを許可するのでしょうか? 自分の足を撃つ以外に、これで何ができますか?
事実上、コンパイラは値42の整数のアドレスでポインタを初期化する必要があります。
では、なぜ、一部のコンパイラでは、リテラルのアドレスを直接取得できないのでしょうか。
int* ptr = &10;
参照:
int& ref = 10;
ただし、ポインタとほぼ同じです...
C++0x の右辺値参照に関連するものを見つけました -- セマンティクスを移動 http://www.artima.com/cppsource/rvalue.html