我写了一些测试代码。
int getInt() {
int a = 3;
return a;
}
int& getIntR() {
int a = 3;
return a;
}
int getRL() {
return int(1);
}
int&& getRRL() {
return getRL();
}
int main() {
// works, even though there may cause some problem
int& d = getIntR();
// right,reference to a temporary variable
int&& e = getInt();
// right,because the returned value is lvalue which can't be assigned to rvalue referecen
//int&& f = getIntR();
// here is the code which confused me
int& g = getRRL();
int&& ee = 10;
int& e = ee;
}
我构造一个函数返回一个int&&类型,所以我需要一个临时变量。 正如getRRL()所示,我认为代码可能会这样对待。
int&& temp = 1;
int&g = temp;
temp是对rvalue的引用,但它本身是一个左值,所以我可以将它赋给int&,但是conpiler说"非const引用的初始值必须是左值"这意味着返回的类型不是左值。 但是下面的代码效果很好。
int&& ee = 10;
int& e = ee;
有人可以告诉我原因吗?非常感谢!