对 const 的右值引用有什么用吗?

新手上路,请多包涵

我猜不是,但我想确认一下。 const Foo&& 有什么用,其中 Foo 是类类型?

原文由 fredoverflow 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 758
2 个回答

它们有时很有用。 C++0x 草案本身在一些地方使用它们,例如:

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

上述两个重载确保另一个 ref(T&)cref(const T&) 函数不绑定到右值(否则这是可能的)。

更新

我刚刚检查了官方标准 N3290 ,不幸的是它没有公开可用,它在 20.8 函数对象 [function.objects]/p2 中有:

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

然后我检查了最新的 C++11 后草案,它是公开的 N3485 ,在 20.8 Function objects [function.objects]/p2 中它仍然说:

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

原文由 Howard Hinnant 发布,翻译遵循 CC BY-SA 3.0 许可协议

它们是允许的,甚至函数根据 const 进行排名,但是由于您不能从 const Foo&& 引用的 const 对象中移动,它们没有用。

原文由 Gene Bushuyev 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题