将const int和vs int分配给const int&

Kub*_*tny 8 c++ int const

我试图理解C++中的常量引用,我偶然发现了这个问题:

当我将double赋值给const int&然后更改引用double的值时,my int引用的值保持不变.

    double i = 10;
    const int &ref = i;    
    i = 20;

    cout << "i: " << i << endl;      // i = 20
    cout << "&ref: " << ref << endl; // ref = 10
Run Code Online (Sandbox Code Playgroud)

而在分配int时,值会发生变化.

    int i = 10;
    const int &ref = i;    
    i = 20;

    cout << "i: " << i << endl;      // i = 20
    cout << "&ref: " << ref << endl; // ref = 20
Run Code Online (Sandbox Code Playgroud)

这种行为的原因是什么?我的猜测是,当分配double时,隐式转换为int会创建一个新对象,然后分配它的引用,但是我无法在任何地方找到它.

jro*_*rok 10

即使看起来像,ref也不是参考i.

double i = 10;
const int &ref = i;   // ***
i = 20;
Run Code Online (Sandbox Code Playgroud)

对a的引用int不能引用a double.因此,在标记的行中,发生从a double到a的转换,并且转换int的结果是临时的右值.Normaly,当他们在结尾创造出完整的表达时,他们就会被摧毁.但是C++中的规则允许在绑定到引用时延长临时的生命周期const.它被延长直到参考死亡.为此,编译器实际上在幕后为它分配了一些内存.

赋值修改原始对象i,未命名的临时对象保持不变.