C++11 隐式move-ctor/assignmet操作是否不例外?隐式复制操作呢?

C++11 隐式move-ctor/assignmet操作是否不例外?隐式复制操作呢?,c++11,move,noexcept,C++11,Move,Noexcept,题目说明了一切。我需要知道编译器隐式实现的defaultcopy/move assignment/ctors是否声明为noexcept标准说明: 继承构造函数(12.9)和隐式声明的特殊 成员函数(第12条)有一个例外规范。如果f是 继承构造函数或隐式声明的默认值 构造函数,复制构造函数,移动构造函数,析构函数,复制 赋值运算符或移动赋值运算符,其隐式 异常规范指定类型id T的当且仅当T为 由直接调用的函数的异常规范所允许 由f的隐式定义;f允许所有异常,如果有任何函数 直接调用允许所有异常,

题目说明了一切。我需要知道编译器隐式实现的
default
copy/move assignment/ctors是否声明为
noexcept

标准说明:

继承构造函数(12.9)和隐式声明的特殊 成员函数(第12条)有一个例外规范。如果f是 继承构造函数或隐式声明的默认值 构造函数,复制构造函数,移动构造函数,析构函数,复制 赋值运算符或移动赋值运算符,其隐式 异常规范指定类型id T的当且仅当T为 由直接调用的函数的异常规范所允许 由f的隐式定义;f允许所有异常,如果有任何函数 直接调用允许所有异常,f具有 异常规范noexcept(true)如果每个函数都直接 调用不允许任何异常

因此,如果类的隐式声明的copy/move赋值/ctors不需要调用标记为noexcept(false)的任何内容,那么它们将具有noexcept(true)说明符。需要调用的函数将是基类和非静态数据成员的复制/移动分配/复制器。

标准规定:

继承构造函数(12.9)和隐式声明的特殊 成员函数(第12条)有一个例外规范。如果f是 继承构造函数或隐式声明的默认值 构造函数,复制构造函数,移动构造函数,析构函数,复制 赋值运算符或移动赋值运算符,其隐式 异常规范指定类型id T的当且仅当T为 由直接调用的函数的异常规范所允许 由f的隐式定义;f允许所有异常,如果有任何函数 直接调用允许所有异常,f具有 异常规范noexcept(true)如果每个函数都直接 调用不允许任何异常


因此,如果类的隐式声明的copy/move赋值/ctors不需要调用标记为noexcept(false)的任何内容,那么它们将具有noexcept(true)说明符。需要调用的函数将是基类和非静态数据成员的复制/移动赋值/构造函数。

显然,它们不能只是无条件的无例外,这既愚蠢又错误(例如,一个包含
std::string
成员的类的隐式复制构造函数可能需要分配内存,因此它不可能是异常的)


如果只调用noexcept函数,它们就是noexcept;如果调用任何非noexcept函数,它们就不是noexcept。

显然,它们不能只是无条件的noexcept,这既愚蠢又错误(例如,一个包含
std::string
成员的类的隐式复制构造函数可能需要分配内存,因此它不可能是异常的)

如果它们只调用noexcept函数,那么它们就是noexcept;如果它们调用任何非noexcept函数,那么它们就不是noexcept