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