Const引用和左值

New*_*ewB 12 c++ rvalue lvalue

我们不能写,int& ref = 40因为我们需要lvalue在右侧.但我们可以写const int& ref = 40.为什么这可能?rvalue而是40lvalue

我知道这是一个例外,但为什么呢?

und*_*ind 13

正如Stroustrup所说:

const T的初始化器不必是左值,甚至不是T型.在这种情况下:

[1]首先,如果需要,应用隐式类型转换为T.

[2]然后,结果值放在T类型的临时变量中.

[3]最后,此临时变量用作初始化程序的值.

因此,当您键入时const int& ref = 40,临时int变量在幕后创建,ref绑定到此临时变量.


Dav*_*eas 12

语言中有一条规则允许将const值引用绑定到rvalue.该规则的主要原因是,如果它不存在,那么你将不得不提供不同的函数重载,以便能够使用临时值作为参数:

class T; // defined somewhere
T f();
void g(T const &x);
Run Code Online (Sandbox Code Playgroud)

有了这个规则,你可以做到g(f()),没有它,能够做到这一点,你必须创建一个grvalue的不同重载(这是从rvalue-references甚至不在语言中的时间!)