在重新分配时决定是移动还是复制元素之前,向量似乎会检查移动构造函数是否标记为 noexcept。默认移动构造函数是否定义为 noexcept?我看到了以下文档,但没有具体说明。http://en.cppreference.com/w/cpp/language/move_constructor
隐式声明的移动构造函数
如果没有为类类型(结构、类或联合)提供用户定义的移动构造函数,并且以下所有情况都为真: 没有用户声明的复制构造函数 没有用户声明的复制赋值运算符 没有用户声明的移动赋值运算符 没有用户声明的析构函数 隐式声明的移动构造函数未定义为删除由于下一节中详述的条件 然后编译器将声明一个移动构造函数作为其类的内联公共成员签名 T::T(T&&) 一个类可以有多个移动构造函数,例如 T::T(const T&&) 和 T::T(T&&)。如果存在一些用户定义的移动构造函数,用户仍然可以强制生成带有关键字 default 的隐式声明的移动构造函数。