首页 > 解决方案 > const 类型的绑定如何在 C++ 中工作?

问题描述

为什么这个绑定没问题

int main()
{
    double d = 4.56;
    const int &r = d;

    return 0;
}

但这不是

int main()
{
    double d = 4.56;
    int &r = d;

    return 0;
}

任何人都可以在第一个编译但第二个显示错误时向我解释

标签: c++referenceconstants

解决方案


int引用不能绑定到类型的对象,double因为类型不匹配。

因此,为了使引用的初始化完全起作用,int必须创建一个正确类型的新临时对象。这是可能的,因为存在从double到的隐式转换序列int

然后引用应该绑定到这个临时的,即右值表达式,但只有const左值引用被允许绑定到右值。const不允许非左值引用这样做,从而使第二个程序格式错误。

请注意,在第一个程序中,虽然引用绑定到一个临时对象,该对象通常会在创建它的完整表达式结束时被销毁,但绑定到引用会将该临时对象的生命周期延长到参考资料。所以r在第一个程序中使用实际上是可以的。

但是,通过访问r不会指代d,而是指独立于 的那个新的临时对象d,这可能会令人惊讶,因此我认为这样写并不是一个好主意。使用auto&orconst auto&确保r肯定会引用d并且由于类型不匹配而不会发生任何隐式转换。如果您想要转换,只需使用int而不是对int.


推荐阅读