我正在探索这个问题:鉴于
char * x
,为什么const char * && rc2 = x
无法编译?
我发现 dcl.init.ref#5.4.4 表示(当我们将
T1 &&
绑定到 T2
左值,其中 T2
不是类类型)并且如果 T1
与引用相关T2
,那么如果引用是右值引用,则初始化表达式不应是左值。
我的问题是,为什么会有这样的规则?这个规则想要避免什么?
我们已经有了可以绑定到左值的引用,这些都是普通引用:
SomeType & r1 = must-be-lvalue;
SomeType const& r2 = lvalue-or-rvalue;
相反,
&&
(右值引用)仅允许绑定到右值:
SomeType && r3 = must-be-rvalue;
那么为什么左值不能绑定到 rvlaue 引用呢?
如果它可以绑定到右值和左值,那就和
const&
没有什么不同了,那为什么要引入它呢?
如果它只能绑定到左值,那就和
&
没有什么不同了,那为什么要引入它呢?