在C++中分配给float变量时,为什么双引用值不会改变

Sha*_*aul 4 c++ reference

我试图理解将float赋值给const引用double的概念,如果浮点值更新,则double的值不会改变.

float d = 2.0;
const double & f = d;
d = 3.0;
std::cout << d << " " << f << std::endl;
Run Code Online (Sandbox Code Playgroud)

输出:

 3 2
Run Code Online (Sandbox Code Playgroud)

这背后的原因是什么?

但是,当我们将引用变量设置为与另一个变量相同的类型时,不会出现此问题.

son*_*yao 8

但是,当我们将引用变量设置为与另一个变量相同的类型时,不会出现此问题

这才是重点; 你不能直接绑定不同类型的对象引用.

给定const double & f = d;,临时double将构造d,然后绑定到引用f.修改d与临时无关; 他们是两个不相关的对象.这就是为什么你会得到不同的结果时,打印出来df.

BTW:只有左值引用为const和右值引用可以绑定到暂时的,所以const double & f = d;double && f = d;正常工作.Lvalue引用非const不能绑定到临时,那么double & f = d;就行不通了.