如果首先使用非const初始化,为什么允许对const的非const引用?

Jam*_*ens 0 c++ const reference

可以理解,编译器将不允许以下内容:

const int ci = 1000;
int &r = ci;
Run Code Online (Sandbox Code Playgroud)

因为这意味着我可以尝试通过r来改变ci的值,但ci是const.

为什么然后允许以下内容,除了首先为r分配非const int之外,它与上面相同?

int i;
const int ci = 1000;
int &r = i;
r = ci;
Run Code Online (Sandbox Code Playgroud)

如果您尝试通过r更改ci,则ci将保持相同的值.然而,与第一个示例不同,它不会被编译器捕获.对此有解释吗?

Mar*_*k B 5

你不是重新r引用参考ci.你正在为r(i)的值指定引用值ci.