#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的引用,并且引用被引用到左值,为什么它会起作用呢?
答案 0 :(得分:6)
如果没有const
,这确实无效 - 您会收到编译错误。
但是const
就在那里,即你不会修改c
引用的内容。
对于这种情况,标准中还有其他措辞,临时值c
引用(1 + 2
的结果)将其生命周期延长到最后参考文献的生命周期。
这与auto
完全无关。这里的const
正在发挥作用。