Rvalue引用左值引用

时间:2014-05-13 11:17:27

标签: c++11 reference rvalue-reference

Rvalues不能用于初始化左值(正常)引用。但是如果我写一个辅助转换函数,它就可以了。在后台发生了什么,是否可能有危险?

template <class T>
inline T& getLvalueRef(T&& x)
{
    return x;
}

编译器接受这个。

然后

int ten = 10;
int& ref = getLvalueRef(ten+8);

// use some variables to rewrite memory
int a = 7;
int b = 10;
int c = (a+b)*6;

// check if still works
cout << ref << endl; // okay, still 18
ref = 9;
cout << ref << endl; // okay, 9

1 个答案:

答案 0 :(得分:1)

您的代码调用未定义的行为。 ten+8创建一个临时文件,其生命周期结束于它出现的完整表达式的末尾(在您的情况下为分号)。 getLvalueRef然后返回对此临时的引用。

不允许使用此引用超过创建ten+8完整表达式