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()),没有它,能够做到这一点,你必须创建一个g带rvalue的不同重载(这是从rvalue-references甚至不在语言中的时间!)
| 归档时间: |
|
| 查看次数: |
4156 次 |
| 最近记录: |