对于struct echo "last element" ;
,编译器默认生成复制构造函数。 gcc和clang似乎都将它们定义为A
(live demo)。现在我想知道默认生成的构造函数是常量表达式的规则是什么?
constexpr
答案 0 :(得分:1)
是的,编译器可以生成默认构造函数constexpr
。见[class.ctor#7]:
如果该用户编写的默认构造函数满足constexpr构造函数的要求,则隐式定义的默认构造函数为constexpr。
但是,非文字类型的类仍然可以有constexpr
构造函数,它只是不能默认。见[dcl.fct.def#default-3]:
未定义为已删除的显式默认函数只有在被隐式声明为constexpr时才可以声明为constexpr。 如果函数在其第一个声明中显式默认,则隐式声明将隐含地认为是constexpr。