【发布时间】:2013-09-21 19:05:04
【问题描述】:
移动赋值运算符通常应声明为 noexcept(即将类型存储在 STL 容器中)。但是复制和交换习惯用法允许在单个代码中定义复制和移动赋值运算符。在这种情况下如何处理 noexcept 说明符?复制构造可以抛出,但我怀疑它是否会违反 noexcept 说明符。
// Is it correct considering that T copy constructor can throw?
T& operator=(T other) noexcept;
【问题讨论】:
-
这里的
noexcept很好。请注意,is_nothrow_*_constructible特征仍将返回正确的值,因为它们的实现类似于noexcept(declval<T&>() = declval<T const&>()),它还考虑了复制或移动构造函数是否抛出(因为复制/移动需要碰巧按值传递)。
标签: c++ c++11 noexcept copy-and-swap