Vin*_*ent 5 constructor assignment-operator constexpr c++14 c++17
对于类型为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.
| 归档时间: | 
 | 
| 查看次数: | 304 次 | 
| 最近记录: |