为什么双精度引用值在分配给C++中的浮点变量时不会更改

Why double reference value doesn't change when assigned to float variable in C++

本文关键字:浮点变量 C++ 引用 双精度 分配 为什么      更新时间:2023-10-16

我正在尝试理解将浮点值分配给常量引用double的概念,并且如果浮点值更新,则double的值不会改变。

float d = 2.0;
const double & f = d;
d = 3.0;
std::cout << d << " " << f << std::endl;

输出:

3 2

这背后的原因是什么。

然而,当我们将引用变量设置为与其他变量相同的类型时,就不会出现这个问题。

然而,当我们将引用变量设置为与其他变量相同的类型时,不会出现此问题

这就是重点;不能直接将引用绑定到具有不同类型的对象。

给定const double & f = d;,将从d构造临时double,然后绑定到参考fd的修改与临时性无关;它们是两个无关的物体。这就是为什么打印df时会得到不同的结果。

BTW:只有对const的左值引用和右值引用可以绑定到临时,所以const double & f = d;double && f = d;可以正常工作。对非常量的Lvalue引用不能绑定到临时,则double & f = d;将不起作用。