首页 > 解决方案 > 将 int 分配给 double&

问题描述

我想了解为什么这不能编译:

int main()
{
    int a = 1;
    double& b = a;
    std::cout << b;
}

使用double const& b = a而不是double& b = a工作正常。

标签: c++reference

解决方案


Adouble和 anint在内存中有不同的对齐要求和不同的表示。通过另一种类型的眼睛将变量读取为一种类型也会使您的程序具有未定义的行为。

当你做类似的事情时

int a = 1;
double b = a;  // note, not a reference

thena被隐式转换为一个临时double值,然后分配给b. 如果你改为

double& b = a;

然后b尝试引用该temporary double,这是无效的,因为该temporary 将在表达式的末尾被销毁。

但是,您可以通过使用const&. 然后临时的生命将被延长到引用生命的结束(范围的结束)。

例子:

const double& b = a; // valid, but usually pointless

关于您对问题的补充:

虽然使用double const& b = a而不是double& b = a工作正常

那只是因为“标准是这样说的”。临时的非const&表示您想要更改该临时的 - 这通常是一个错误,在这些情况下您可能需要 adouble而不是 a 。double&


推荐阅读