int getInt() {
int a = 3;
return a;
}
int& getIntR() {
int a = 3;
return a;
}
int getRL() {
return 1;
}
int&& getRRL() {
return getRL();
}
int main() {
// 正确,以返回的临时变量初始化a
int a = getInt();
// 正确,以返回的值初始化a
int b = getIntR();
// 错误,不能引用返回的临时变量
//int& c = getInt();
// 可以运行,但是会造成值的修改
int& d = getIntR();
// 正确,右值引用一个匿名变量
int&& e = getInt();
// 错误,函数返回的是【左值】
//int&& f = getIntR();
// ?
int& g = getRRL();
cout << g << endl;
}
由于感觉这方面概念不清,然后写了一些测试代码,但是对最后一个产生了疑问
我构造了一个函数,返回类型是int&&,但是int&&类型只能绑定非const右值,所以我又构造了一个函数返回一个临时int。
我理解为,在返回函数的时候int&& temp = getRL(),又由于temp是一个引用,返回为一个左值,所以可以
int& g = getRRL();
虽然以上会修改里面的内容,但是我觉得还是可以运行的,但是编译器却报错,非常量引用的初始值必须为左值。
难道以int&&返回的类型不是左值吗?_