我猜不是,但我想证实一下.是否有用const Foo&&,Foo哪种类型?
在模板的上下文中,应用以下"引用折叠"规则:
template <typename T>
void foo(T && t)
{
//T& & -> T&
//T& && -> T&
//T&& & -> T&
//T&& && -> T&&
}
Run Code Online (Sandbox Code Playgroud)
为什么语言禁止使用const限定符的"通用引用" ?
template <typename T>
void foo(T const && t)
Run Code Online (Sandbox Code Playgroud)
如果类型已经解决了参考(4个案例中的3个),那似乎是有意义的.
我确信这个想法与语言的其他一些设计方面不相容,但我看不出全貌.
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值类别.