次のコードを書くと:
#include <iostream>
using namespace std;
int main()
{
cout << &(int &&)123 << endl;
return 0;
}
次にg++
文句を言う:
foo.cc: In function ‘int main()’:
foo.cc:7:20: error: taking address of xvalue (rvalue reference)
わかりました。rvalues、lvalues、xvalues、glvalues、prvaluesとは何ですか?xvalueは、「期限切れ」になることを意味します。これは理にかなっています。しかし今、私がこれを行うと:
#include <iostream>
using namespace std;
int main()
{
const int &x = (int &&)123;
cout << &x << endl;
return 0;
}
これは問題なく「機能」し、アドレスを出力します。だから、私はいくつかの質問があります:
- 値が期限切れになりそうな場合、なぜそれを参照できるのですか?参照は元のオブジェクトを存続させません(右?)。
- そのような参照は未定義の動作をもたらしますか?たとえば、破壊された可能性のあるオブジェクトを参照しているためですか?
一般に、右辺値参照の存続期間を知る方法はありますか?