默认的 Move 构造函数是否定义为 noother?

在决定重新分配时是移动还是复制元素之前,向量似乎会检查 move 构造函数是否被标记为 nobut。默认的 move 构造函数是否定义为 noother?我看到了下面的文档,但它没有指定 this. http://en.cppreference.com/w/cpp/language/move_constructor

隐式声明的 move 构造函数

如果没有用户定义的移动 为类类型(结构、类或联合)提供了构造函数, 以下所有内容都是正确的: 没有用户声明的副本 构造函数没有用户声明的复制赋值运算符 没有用户声明的移动赋值操作符 隐式声明的 move 构造函数是用户声明的析构函数 由于下一节中详细介绍的条件,没有定义为删除 然后编译器将一个 move 构造函数声明为内联公共 具有签名 T: : T (T & &)的类成员 多个 move 构造函数,例如 T: : T (const T & &)和 T: : T (T & &)。 如果存在一些用户定义的 move 构造函数,则用户仍然可以 强制生成隐式声明的 move 构造函数 关键字默认值。

17495 次浏览

我认为答案是15.4/14(异常规范) :

继承构造函数(12.9)和隐式声明的特殊成员函数(子句12)具有 异常-规范。如果 f是一个继承构造函数或者一个隐式声明的缺省构造函数、复制建构子、 移动构造函数移动构造函数、析构函数、拷贝赋值操作符或者 move 赋值操作符,那么它的隐式 异常-规范在且仅在 < em > 异常规范允许的情况下指定类型 id Tf的隐式定义直接调用的函数; 如果它直接调用的任何函数允许所有异常,那么 f允许所有异常; 如果它直接调用的每个函数都不允许异常,那么 f就有 异常-规范 noexcept(true)

基本上,它做你想做的事情,隐式声明的 move 构造函数是 noexcept