【发布时间】:2014-05-13 11:17:26
【问题描述】:
右值不能用于初始化左值(正常)引用。但是,如果我编写一个辅助转换函数,它就可以工作。后台发生了什么,是否有危险?
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
【问题讨论】:
-
据我所知
ref引用了getLvalueRef中的堆栈变量x,它在ref之前消失了。我相信'//使用一些变量来重写内存'失败了。虽然不是 100% 确定。
标签: c++11 reference rvalue-reference