该规范似乎没有对文字类类型的成员函数施加任何约束
我有两个问题
问题 1)我是否完全自由地决定我可以放入哪些成员功能?
问题 2)如何验证类是否为文本类型? (可能的方法:定义它的 constexpr 对象并检查它是否编译?
我看到的对文字类的唯一约束是:
• 所有数据成员都必须具有文本类型。
• 该类必须至少有一个 constexpr 构造函数。
• 如果数据成员具有类内初始值设定项,则内置类型成员的初始值设定项必须是常量表达式,或者如果成员具有类类型,则初始值设定项必须使用成员自己的 constexpr 构造函数。
• 类必须对其析构函数使用默认定义,析构函数是销毁类类型的对象的成员
(来源:C++入门,第5版)
Q1。是的,你可以有你喜欢的任何方法(不包括有约束的构造函数/析构函数)。甚至包括virtual
方法,如果构造函数是constexpr
.
问题 2.正如您所说,定义该类型的constexpr
变量。 如果没有诊断消息(并且编译器符合要求),则该类型肯定是 LiteralType。 请注意,类型可能是文字,但代码由于其他原因导致编译失败。
对我来说,标准中的定义似乎比您引用的定义更清晰一些。例如,在某些情况下不需要constexpr
构造函数(例如闭包或聚合)。