【发布时间】:2014-07-24 20:12:30
【问题描述】:
C++标准定义了以下函数被删除;
template <class T>
void ref(const T&&) = delete;
template <class T>
void cref(const T&&) = delete;
这是为了通过禁止函数绑定到临时值(右值)来帮助确保函数不会被滥用。
-
const &&是否绑定到所有右值,特别是纯右值? -
const &&是否会绑定到所有“移动对象”(xvalues;基本上是从std::move或类似返回的东西)?
我可以推断它应该,但我没有任何“证据”。
- 或者相反,是否存在右值(prvalue 或 xvalue)不会绑定到
const &&的情况?- 如果是,那又如何?
注意:来自 cmets 的一些澄清,这个问题严重影响了经典的右值,即纯右值值类别。
【问题讨论】:
-
“移动类型”是什么意思?
-
@JosephMansfield,从
std::move或类似返回的东西 -
请注意:一般情况下,
const T &&无法在您的右值类型为volatile T时工作。但是这里推导出T,所以如果需要T可以推导出为volatile-qualified类型。 -
@user2485710: “你不会错理解
std::move的作用”当然,只要有人告诉你std::move实际上不会移动任何东西。 -
请注意
std::move总是返回一个右值 except 当参数是函数类型时——在这种情况下它返回一个左值,因为没有函数的右值类型。但是,“函数的右值引用”仍然会绑定到函数类型的左值。
标签: c++ c++11 language-lawyer rvalue-reference rvalue