为什么引用类型的某些变量可以绑定rvalues而有些不能绑定?

时间:2015-09-15 10:32:05

标签: c++ c++11

#include <iostream>

using namespace std;
int main() {

//int& a = 3; <- Doesn't compile. Expression must be lvalue.
const auto& c = 1 + 2; // c is a constant reference to an int. (?)
                       // compiles fine. 1+2 is a rvalue? what's going on?
cout << c << endl;

return 0;
}

我不明白为什么编译器不会引发编译错误。 由于auto“强制”c是对常量int的引用,并且引用被引用到左值,为什么它会起作用呢?

1 个答案:

答案 0 :(得分:6)

如果没有const,这确实无效 - 您会收到编译错误。

但是const就在那里,即你不会修改c引用的内容。

对于这种情况,标准中还有其他措辞,临时c引用(1 + 2的结果)将其生命周期延长到最后参考文献的生命周期。

这与auto完全无关。这里的const正在发挥作用。