可以是常量表达式的默认函数是隐式常量表达式吗?
class c
{
public:
constexpr /*<- necessary?*/ c() = default;
constexpr /*<- necessary?*/ c(c const&) = default;
constexpr /*<- necessary?*/ c(c &&) = default;
constexpr /*<- necessary?*/ c& operator =(c const&) = default;
constexpr /*<- necessary?*/ c& operator =(c &&) = default;
~c() = default;
private:
int x = 0;
};其他限定符呢,比如noexcept
发布于 2020-07-16 07:10:29
可以,如果满足constexpr成员的要求,则默认特殊成员为constexpr。具体见11.4.4.1/4的默认构造函数:
默认且未定义为已删除的默认构造函数是隐式定义的...隐式定义的默认构造函数执行类的一组初始化,这些初始化将由用户为该类编写的默认构造函数执行,没有ctor初始化器和空的复合语句。..。如果用户编写默认构造函数将满足常量表达式构造函数(dcl.constexpr)的要求,则隐式定义的默认构造函数为常量表达式。在隐式定义类的默认默认构造函数之前,将隐式定义其基类及其非静态数据成员的所有非用户提供的默认构造函数。..。
其他特殊成员也有类似的措辞。
https://stackoverflow.com/questions/62924967
复制相似问题