bja*_*fly 64 c++ constructor move-semantics c++11
在重新分配时,在确定是否移动或复制元素之前,向量将检查移动构造函数是否标记为noexcept.默认移动构造函数是否定义为noexcept?我看到了以下文档,但没有说明这一点.http://en.cppreference.com/w/cpp/language/move_constructor
隐式声明的移动构造函数
如果没有为类类型(结构,类或联合)提供用户定义的移动构造函数,并且满足以下所有条件:没有用户声明的复制构造函数没有用户声明的复制赋值运算符没有用户声明的移动赋值运算符没有用户声明的析构函数,由于下一节中详述的条件,隐式声明的移动构造函数未定义为已删除,因此编译器将声明移动构造函数作为其类的内联公共成员signature T :: T(T &&)一个类可以有多个移动构造函数,例如T :: T(const T &&)和T :: T(T &&).如果存在一些用户定义的移动构造函数,则用户仍可以使用关键字default强制生成隐式声明的移动构造函数.
Ker*_* SB 70
我认为答案是15.4/14(例外规范):
继承构造函数(12.9)和隐式声明的特殊成员函数(子句12)具有异常规范.如果
f
是继承构造函数或隐式声明的默认构造函数,复制构造函数,移动构造函数,析构函数,复制赋值运算符或移动赋值运算符,则其隐式异常规范指定type-idT
if且仅当if 例外T
允许时 由隐式定义直接调用的函数; 如果它直接调用的任何函数允许所有异常,则允许所有异常,并具有异常规范f
f
f
noexcept(true)
如果它直接调用的每个函数都不允许例外.
基本上,它是你的想法,隐式声明的移动构造函数就是noexcept
它.