Eli*_*doo 7 c++ const rvalue lvalue
出于某种原因,我无法找到这个确切的问题.为什么它被允许绑定rvalue到const lvalue reference,虽然如果没有它就不可能相同const?
我确实理解rvalue的生命周期以某种方式得到扩展(在第一种情况下),但如果是这样,为什么编译器不允许改变'rvalue',这不再是一个临时对象.
例如,请考虑以下代码:
int main(){
int &i=3; //produces error
const int&j =3; //compiles
return 1;
}
Run Code Online (Sandbox Code Playgroud)
小智 5
您可能会发现以下文章很有用:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/1993/N0345.pdf
我在这里可能完全错了,但这就是我将其合理化的方式。右值是常数,不能改变。你不能改变整数 5,事实。因此,当您绑定引用时,左值必须是常量。否则你的编译器会抛出一个错误:
obj & a1 = bar();
invalid initialization of non-const reference of type ‘obj&’ from an rvalue of type ‘obj’
Run Code Online (Sandbox Code Playgroud)
使用 g++
将右值安全地绑定到左值的唯一方法是将左值标记为 const,或者使用可变的右值引用&&(在 C++11 中引入,相信吗?)
struct obj {
};
obj bar() {
obj x;
return x;
}
int main() {
const obj & a1 = bar();
obj && a2 = bar();
return 0;
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2189 次 |
| 最近记录: |