gpt4 book ai didi

c++ - `const &&` 是否绑定(bind)到所有 prvalues(和 xvalues)?

转载 作者:可可西里 更新时间:2023-11-01 18:32:13 26 4
gpt4 key购买 nike

C++标准定义删除了以下函数;

template <class T>
void ref(const T&&) = delete;

template <class T>
void cref(const T&&) = delete;

这是为了通过禁止函数绑定(bind)到临时值(右值)来帮助确保函数不被滥用。

  • const && 是否绑定(bind)到所有右值,特别是纯右值?
  • const && 会绑定(bind)到所有“移动的对象”(xvalues;基本上是从 std::move 或类似的返回的东西)吗?

我可以推断它应该如此,但我对此没有任何“证据”。

  • 或者相反,是否存在右值(prvalue 或 xvalue)不会绑定(bind)到 const && 的情况?
    • 如果是,怎么会这样?

注意:从评论中可以清楚地看出,这个问题严重偏向于经典右值,即纯右值类别。

最佳答案

T const&& 可以绑定(bind)到 Tconst T 类型的右值。

来自 8.5.3 [dcl.init.ref] 第 5 段:

5 - A reference to type "cv1 T1" is initialized by an expression of type "cv2 T2" as follows: [...]
— Otherwise, [...] the reference shall be an rvalue reference. [...]
— If the initializer expression
— is an xvalue, class prvalue, array prvalue or function lvalue and "cv1 T1" is reference-compatible with "cv2 T2" [...] then the reference is bound to the value of the initializer expression [...]

如果初始化表达式是非类类型的纯右值,则为引用绑定(bind)创建一个临时拷贝(同上)。

引用兼容性在 8.5.3p4 中定义;它需要相同或基类关系和相同或更高的简历资格。

因此,对于绑定(bind)到 T const&& 的右值,其 cv 限定必须不大于 const

关于c++ - `const &&` 是否绑定(bind)到所有 prvalues(和 xvalues)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24943093/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com