规范似乎没有对文字类类型的成员函数施加任何约束
对此我有两个问题
问题1)我对可以放入哪些成员函数完全自由吗?
问题2)如何验证类是否为文字类型? (可能的方法:为其定义constexpr对象并检查其是否可以编译?)
我看到的文字类的唯一限制是:
•所有数据成员必须具有文字类型。
•该类必须至少具有一个constexpr构造函数。
•如果数据成员具有类内初始化程序,则内置类型成员的初始化程序必须是常量表达式,或者如果成员具有类类型,则初始化程序必须使用成员自己的constexpr构造函数。 / p>
•类的析构函数必须使用默认定义,该析构函数是销毁类类型对象的成员
(来源:C ++ Primer,第5版)
答案 0 :(得分:1)
Q1。是的,您可以使用任何喜欢的方法(具有约束的构造函数/析构函数除外)。即使构造方法是virtual
,甚至包括constexpr
方法。
Q2。如您所说,定义该类型的constexpr
变量。如果没有诊断消息(并且编译器符合要求),则该类型肯定为LiteralType。请注意,类型可能是原义的,但代码由于其他原因而无法编译。
in the Standard的定义对我来说似乎比您引用的定义更清晰。例如,在某些情况下,不需要constexpr
构造函数(例如,闭包或聚合)。