【发布时间】:2014-01-07 21:22:57
【问题描述】:
在 C++11 中,可以使用可变右值引用来初始化 const 左值引用。然后,右值引用的值可以更改为 const 左值所指的内容产生可见的突变。这是一个例子:
int && rval = 3;
const int & lval = rval;
cout << "lval = " << lval << endl;
cout << "rval = " << rval << endl;
rval ++;
cout << "lval = " << lval << endl;
输出(来自 clang 3.2 和 gcc 4.8.2 都带有 -std=c++11):
lval = 3
rval = 3
lval = 4
我会猜原因是不能通过左值引用修改所指对象,但可以通过右值引用修改它。但是,我不明白为什么允许 const 左值引用可变对象。
有人可以解释这样做的理由并给出处理这种情况的最佳做法吗?另外,还有其他类似的可以颠覆constness的例子吗?
【问题讨论】:
-
真希望这是UB的结果。
标签: c++ gcc c++11 initialization clang