当 T1 与 T2 引用相关时(并且 T1 和 T2 不是类类型),为什么 C++ 禁止将 T1 && 绑定到 T2 左值

问题描述 投票:0回答:1

我正在探索这个问题:鉴于

char * x
,为什么
const char * && rc2 = x
无法编译?

我发现 dcl.init.ref#5.4.4 表示(当我们将

T1 &&
绑定到
T2
左值,其中
T2
不是类类型)并且如果
T1
与引用相关
T2
,那么如果引用是右值引用,则初始化表达式不应是左值。

我的问题是,为什么会有这样的规则?这个规则想要避免什么?

c++ language-lawyer rvalue-reference
1个回答
0
投票

我们已经有了可以绑定到左值的引用,这些都是普通引用:

SomeType & r1 = must-be-lvalue;
SomeType const& r2 = lvalue-or-rvalue;

相反,

&&
(右值引用)仅允许绑定到右值:

SomeType && r3 = must-be-rvalue;

那么为什么左值不能绑定到 rvlaue 引用呢?

如果它可以绑定到右值和左值,那就和

const&
没有什么不同了,那为什么要引入它呢?

如果它只能绑定到左值,那就和

&
没有什么不同了,那为什么要引入它呢?

© www.soinside.com 2019 - 2024. All rights reserved.