Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么向右值引用添加引用不是错误?_C++_C++11 - Fatal编程技术网

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
”,而尝试创建类型“右值引用到cv
TR
”会创建类型
TR


啊,酷!您是否有机会引用C++的规范,在这里提到了?added@tobspr如果你听过有人谈论“通用引用”或“转发引用”,这就是引用崩溃的简化解释,许多人认为这在实践中更直观、更有用。你已经发现了少数几个角落的案例之一,它不起作用。
A& & -> A&
A& && -> A&
A&& & -> A&
A&& && -> A&&