C++标准定义了以下删除的函数;
template <class T>
void ref(const T&&) = delete;
template <class T>
void cref(const T&&) = delete;
这是为了帮助确保函数不会通过不允许它们绑定到临时值(右值)而被滥用。
- Does
const &&
绑定到所有右值,特别是右值?
- Would
const &&
绑定到所有“移动的对象”(xvalues;基本上是从std::move
或类似)?
我可以推断它应该,但我没有任何“证据”。
- Or conversely, are there cases where an rvalue (prvalue or xvalue) will not bind to
const &&
?
注意:从评论中可以清楚地看出,这个问题严重依赖于经典右值,纯右值类别。
T const&&
可以绑定到类型的右值T
or const T
.
从8.5.3开始[dcl.init.ref]第5段:
5 - 对类型“cv1 T1”的引用由“cv2 T2”类型的表达式初始化,如下所示:[...]
— 否则,[...] 引用应为右值引用。 [...]
— 如果初始化表达式
— 是 xvalue、类纯右值、数组纯右值或函数左值,并且“cv1 T1”与“cv2 T2”引用兼容 [...]
然后引用绑定到初始化表达式的值 [...]
如果初始化表达式是非类类型的纯右值,则为引用绑定创建临时副本(同上)。
参考兼容性在 8.5.3p4 中定义;它需要相同或基本类别的关系以及相同或更高的简历资格。
因此对于要绑定的右值T const&&
,其简历资格不得大于const
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)