C++ 为什么向右值引用添加引用不是错误?
我有以下类型的定义:C++ 为什么向右值引用添加引用不是错误?,c++,c++11,C++,C++11,我有以下类型的定义: using int_ref = int&&; 为什么以下代码不产生错误(或打印false) std::cout::value;//印刷品1 我希望int\u ref&&扩展到int&&&&,这显然是不可能的。我遗漏了什么吗?这是由于 基本上,虽然您不能自己编写引用,但在某些情况下(typedef、模板参数、decltypes),您可以向引用类型添加创建引用,其折叠方式如下: A& & -> A& A& &&a
using int_ref = int&&;
为什么以下代码不产生错误(或打印false
)
std::cout::value;//印刷品1
我希望int\u ref&&
扩展到int&&&&
,这显然是不可能的。我遗漏了什么吗?这是由于
基本上,虽然您不能自己编写引用,但在某些情况下(typedef、模板参数、decltypes),您可以向引用类型添加创建引用,其折叠方式如下:
A& & -> A&
A& && -> A&
A&& & -> A&
A&& && -> A&&
在您的例子中,int\u ref
是int&
,因此int&&&&
变成int&
相关标准报价:
(N3337)[dcl.ref]/6:
如果类型定义(7.1.3)、类型模板参数(14.3.1)或decltype说明符(7.1.6.2)表示类型TR
这是对类型的引用T
,尝试创建类型“对cv的左值引用TR
”将创建该类型
“左值引用到T
”,而尝试创建类型“右值引用到cvTR
”会创建类型TR
啊,酷!您是否有机会引用C++的规范,在这里提到了?added@tobspr如果你听过有人谈论“通用引用”或“转发引用”,这就是引用崩溃的简化解释,许多人认为这在实践中更直观、更有用。你已经发现了少数几个角落的案例之一,它不起作用。
A& & -> A&
A& && -> A&
A&& & -> A&
A&& && -> A&&