对于类型T的类,根据类的不同,编译器可以生成以下成员:
- 默认构造函数:
T::T()
- 复制构造函数:
T::T(const T&)
- 移动构造函数:
T::T(T&&)
- 复制赋值运算符:
T& T::operator=(const T&)
- 移动赋值运算符:
T& T::operator=(T&&)
在C++14和C++17中,什么规则会导致编译器生成这些函数的constexpr
版本?
对于类型T的类,根据类的不同,编译器可以生成以下成员:
T::T()
T::T(const T&)
T::T(T&&)
T& T::operator=(const T&)
T& T::operator=(T&&)
在C++14和C++17中,什么规则会导致编译器生成这些函数的constexpr
版本?
constexpr
函数的要求,那么它就是一个constexpr
函数。例如,从C++17开始,[class.ctor]/7:
默认构造函数的措辞是描述“用户编写的默认构造函数”会长什么样子。所以,“那个用户编写的默认构造函数”意味着“编译器生成了什么”。复制/移动构造函数也有类似的措辞。如果用户编写的默认构造函数符合
constexpr
构造函数(10.1.5)的要求,则隐式定义的默认构造函数为constexpr
。
constexpr
。