我正在为我的项目阅读一些库。 他们中的大多数都指定" noexcept"在任何移动构造函数中。 是否有必要写" noexcept"在移动构造函数中还是偶尔发生在我的阅读代码中?
谢谢。
答案 0 :(得分:-1)
我认为这解释了为什么你在移动构造函数中看到noexcept的原因:
"如果在异常发生后,对象保持其原始值,则该类提供强异常保证。类的移动成员显式更改其参数的状态。如果在移动某些成员后抛出异常,则强例外保证可能不再保留,因为来自对象的修改。对于打算与标准库容器一起使用的类型,使用noexcept尤其重要。如果容器中元素类型的移动构造函数不是noexcept,那么容器将使用复制构造函数而不是移动构造函数。"
因此,要回答您的问题,您应该在构造函数可能抛出异常的每种情况下使用noexcept。如果您不使用它,如果发生异常,强异常保证将失败,这可能会导致代码错误恢复出现问题。