Nia*_*all 7 c++ rvalue rvalue-reference language-lawyer c++11
C++标准定义了以下删除的函数;
template <class T>
void ref(const T&&) = delete;
template <class T>
void cref(const T&&) = delete;
Run Code Online (Sandbox Code Playgroud)
这是为了通过禁止函数绑定到临时值(rvalues)来帮助确保函数不被滥用.
const &&绑定到所有rvalues,特别是prvalues?const &&绑定到所有"移动的对象"(xvalues;基本上是从std::move或类似的东西返回)?我可以说它应该,但我没有任何"证据".
const &&?
注意:评论中的一些清晰度,这个问题严重影响经典的右值,prvalue值类别.
T const&&可以绑定到类型T或的右值const T。
从 8.5.3 [dcl.init.ref]第 5 段开始:
\n\n\n\n\n5 - 对类型“cv1 T1”的引用由类型“cv2 T2”的表达式初始化,如下所示: [...]
\n
\n \xe2\x80\x94 否则,[...] 引用应为右值参考。[...]
\n \xe2\x80\x94 如果初始化表达式
\n \xe2\x80\x94 是 xvalue、类纯右值、数组纯右值或函数左值,并且“cv1 T1”与“cv2 T2”引用兼容" [...]\n 那么引用将绑定到初始化表达式的值 [...]
如果初始化表达式是非类类型的纯右值,则为引用绑定创建临时副本(同上)。
\n\n参考兼容性在 8.5.3p4 中定义;它需要相同或基本类别的关系以及相同或更高的简历资格。
\n\n因此,对于要绑定到 的右值T const&&,其 cv 限定必须不大于const。
| 归档时间: |
|
| 查看次数: |
739 次 |
| 最近记录: |