mov构造函数是否总是需要noexcept说明符?

时间:2017-02-12 12:39:56

标签: c++11 constructor move noexcept

我正在为我的项目阅读一些库。 他们中的大多数都指定" noexcept"在任何移动构造函数中。 是否有必要写" noexcept"在移动构造函数中还是偶尔发生在我的阅读代码中?

谢谢。

1 个答案:

答案 0 :(得分:-1)

我认为这解释了为什么你在移动构造函数中看到noexcept的原因:

"如果在异常发生后,对象保持其原始值,则该类提供强异常保证。类的移动成员显式更改其参数的状态。如果在移动某些成员后抛出异常,则强例外保证可能不再保留,因为来自对象的修改。对于打算与标准库容器一起使用的类型,使用noexcept尤其重要。如果容器中元素类型的移动构造函数不是noexcept,那么容器将使用复制构造函数而不是移动构造函数。"

因此,要回答您的问题,您应该在构造函数可能抛出异常的每种情况下使用noexcept。如果您不使用它,如果发生异常,强异常保证将失败,这可能会导致代码错误恢复出现问题。

来源:http://www.codingstandard.com/rule/12-5-4-declare-noexcept-the-move-constructor-and-move-assignment-operator/