为什么int&r = 0是非法的而const int&r = 0是合法的?

Tho*_*hor 2 c++ pointers const reference

我是C++的新手.我正在努力学习const的概念.有人可以告诉我为什么第一个声明是非法的,而第二个是合法的?

int i = -1, &r = 0;         

const int i = -1, &r = 0;  
Run Code Online (Sandbox Code Playgroud)

M.M*_*M.M 7

i这是一个红鲱鱼,问题是int &r = 0;对比const int &r = 0;

非const左值引用必须直接绑定到左值.0不是左值,所以int &r = 0;失败了.

const值左侧引用可以绑定到右值.发生这种情况时,它不会直接绑定.相反,创建临时(const int此处为类型)并从rvalue复制初始化.由于这种约束,临时使其寿命延长.

因此const int &r = 0;是合法的并且具有类似的效果const int __temp = 0; const int &r = __temp;

  • 注意:我故意使用双下划线来表示这是伪代码 (4认同)