文字类类型成员函数约束

时间:2019-06-06 00:58:53

标签: c++

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

对此我有两个问题

问题1)我对可以放入哪些成员函数完全自由吗?

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

我看到的文字类的唯一限制是:

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

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

•如果数据成员具有类内初始化程序,则内置类型成员的初始化程序必须是常量表达式,或者如果成员具有类类型,则初始化程序必须使用成员自己的constexpr构造函数。 / p>

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

(来源:C ++ Primer,第5版)

1 个答案:

答案 0 :(得分:1)

Q1。是的,您可以使用任何喜欢的方法(具有约束的构造函数/析构函数除外)。即使构造方法是virtual,甚至包括constexpr方法。

Q2。如您所说,定义该类型的constexpr变量。如果没有诊断消息(并且编译器符合要求),则该类型肯定为LiteralType。请注意,类型可能是原义的,但代码由于其他原因而无法编译。

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