为什么在C++中将双重引用值分配给浮点变量时不会改变其值?

4
我正在尝试理解将浮点数赋值给const引用double的概念,如果更新了浮点数的值,则double的值不会改变。
float d = 2.0;
const double & f = d;
d = 3.0;
std::cout << d << " " << f << std::endl;

输出:

 3 2

这是什么原因呢?

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

1个回答

8
然而,如果我们将引用变量设置为与其他变量相同的类型,则不会出现此问题。
这就是关键所在:不能直接将引用绑定到具有不同类型的对象。
给定const double & f = d;,将从d构造一个临时的double,然后绑定到引用f。对d的修改与临时变量无关,它们是两个不相关的对象。这就是为什么当打印df时会得到不同的结果。
顺便说一句:只有对const的左值引用和右值引用才能绑定到临时对象,因此const double & f = d;double && f = d;可以正常工作。非const的左值引用无法绑定到临时对象,因此double & f = d;无法工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接