如果我编写以下代码:
#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)
好的,感谢什么是右值、左值、xvalues、glvalues 和 prvalues?我知道一个 xvalue 意味着它即将“过期”,这是有道理的。但现在如果我这样做:
#include <iostream>
using namespace std;
int main()
{
const int &x = (int &&)123;
cout << &x << endl;
return 0;
}
这个“工作”很好,会打印一个地址。所以,我有几个问题:
- 如果值即将过期,为什么我可以引用它?引用不会使原始对象保持活动状态(对吗?)。
- 这样的引用会导致未定义的行为吗?例如,因为我们引用了一个可能已经被破坏的对象?
一般来说,有没有办法知道右值引用的生命周期?