为什么添加对右值引用的引用不是错误
Why is adding a reference to a rvalue reference not an error?
我有以下类型定义:
using int_ref = int&&;
为什么下面的代码没有产生错误(或打印false
)?
std::cout << is_same< int_ref, int_ref&& >::value; // prints 1
我希望int_ref&&
扩展到int&& &&
这显然是不可能的。我错过了什么吗?
这是由于引用折叠规则。
基本上,虽然你不能自己编写对引用的引用,但在某些情况下(typedefs、模板参数、decltypes),你可以添加对引用类型的创建引用,该引用折叠如下:
A& & -> A&
A& && -> A&
A&& & -> A&
A&& && -> A&&
在您的情况下,int_ref
是int&&
,因此int&& &&
变得int&&
。
相关标准报价:
(N3337) [dcl.ref]/6:
如果 typedef (7.1.3)、类型模板参数 (14.3.1) 或 decltype-specifier (7.1.6.2) 表示类型TR
即对类型T
的引用,尝试创建类型"对 cvTR
的左值引用"创建类型 "对T
的左值引用",而尝试创建类型"对 cvTR
的右值引用"创建类型TR
。
相关文章:
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- C++引用错误
- 已定义函数时出现 G++ "未定义的引用"错误
- 链接 cmake 时出现未定义的引用错误
- 只有级联分类器会发出未定义的引用错误
- 2个模板化类的非模板友元函数未定义引用错误
- C/C++ 取消引用错误:在空检查之前取消引用
- 为什么我的C++代码无法编译,出现未定义的引用错误
- 我的代码中C++未定义的引用错误?
- 模板专用化会导致未定义的引用错误
- .cpp文件中未定义的引用错误
- c++ 中目录中文件的未定义引用错误
- Opencv4 使用 pkg-config 给出未定义的引用错误
- 使用Cygwin C++时出现未定义的引用错误,为什么我的文件没有链接?
- 共享指针取消引用错误
- 编译简单的多文件类程序时出现未定义的引用错误
- 模板函数产生未定义的引用错误
- 调用提取重加载器会产生对"运算符"的未定义引用错误>>
- 如何修复"未定义的引用"错误 opencv 和 g++
- 未定义的引用错误,我该怎么办?