【发布时间】:2014-10-09 13:29:32
【问题描述】:
我看过 Scott Meyers 在 GoingNative2013 “An Effective C++11/14 Sampler”上的演讲,他解释了std::move_if_noexcept 的用法。
所以我认为应该有一个std::forward_if_noexcept 来保证forward 的异常安全?为什么标准库中没有这样的东西?有没有其他保证的可能?
【问题讨论】:
-
恢复或保留右值是没有意义的。不过,这并不意味着没有此类助手的用例。
-
forward_if_noexcept的语义是什么?即,与move_if_noexcept? 相比 -
“也保证
forward的异常安全性” 我不确定我理解你的意思。move_if_noexcept没有比move更多或更少的异常安全保证:它是noexcept,只是一个演员表。move_if_noexcept可用于保存对象,即,如果移动失败,则能够恢复以前的状态。 -
Niall,forward 能够处理通用引用,因此使用折叠规则,如果我使用带有 Typededuction 和 T&& 的 Templatefunction,并且我用右值调用它 -> 如果我调用它,它将移动它带有左值->它将复制。因此,在我看来,如果没有 noexcept,forward_if_noexcept 应该向前扩展以复制,否则是旧的行为。
-
@BenjaminSchmidt,有趣的问题和理由。
标签: c++ c++11 perfect-forwarding noexcept