文本类类型成员函数约束



该规范似乎没有对文字类类型的成员函数施加任何约束

我有两个问题

问题 1)我是否完全自由地决定我可以放入哪些成员功能?

问题 2)如何验证类是否为文本类型? (可能的方法:定义它的 constexpr 对象并检查它是否编译?

我看到的对文字类的唯一约束是:

• 所有数据成员都必须具有文本类型。

• 该类必须至少有一个 constexpr 构造函数。

• 如果数据成员具有类内初始值设定项,则内置类型成员的初始值设定项必须是常量表达式,或者如果成员具有类类型,则初始值设定项必须使用成员自己的 constexpr 构造函数。

• 类必须对其析构函数使用默认定义,析构函数是销毁类类型的对象的成员

(来源:C++入门,第5版)

Q1。是的,你可以有你喜欢的任何方法(不包括有约束的构造函数/析构函数)。甚至包括virtual方法,如果构造函数是constexpr.

问题 2.正如您所说,定义该类型的constexpr变量。 如果没有诊断消息(并且编译器符合要求),则该类型肯定是 LiteralType。 请注意,类型可能是文字,但代码由于其他原因导致编译失败。

对我来说,标准中的定义似乎比您引用的定义更清晰一些。例如,在某些情况下不需要constexpr构造函数(例如闭包或聚合)。

最新更新