我注意到将 char
分配给 const int&
编译,但将其分配给 int&
会产生编译错误 .
char c;
int& x = c; // this fails to compile
const int& y = c; // this is ok
我知道这样做不是一个好习惯,但我很想知道它发生的原因 .
我通过寻找"assigning to reference of different type","assigning char to a int reference"和"difference between const reference and non-const reference"搜索了一个答案,并发现了许多有用的帖子(int vs const int&,Weird behaviour when assigning a char to a int variable,Convert char to int in C and C++,Difference between reference and const reference as function parameter?),但它们似乎没有解决我的问题 .
如果以前已经回答过,我很抱歉 .
3 回答
这里,编译器正在执行从
char
到int
的隐式转换 . 生成的临时int
只能绑定到const
引用 . 绑定到const int&
还将延长临时结果的生命周期,以匹配绑定的引用的生命周期 .此行为在标准N4527 8.5.3 / p5.2参考[dcl.init.ref]中是合理的
这条线的事实
创建临时和
y
绑定到临时可以通过以下方式验证:输出:
当
c
的值更改时,y
的值未更改 .