文本类类型成员函数约束
Literal class type member function constraints
该规范似乎没有对文字类类型的成员函数施加任何约束
我有两个问题
问题 1)我是否完全自由地决定我可以放入哪些成员功能?
问题 2)如何验证类是否为文本类型? (可能的方法:定义它的 constexpr 对象并检查它是否编译?
我看到的对文字类的唯一约束是:
• 所有数据成员都必须具有文本类型。
• 该类必须至少有一个 constexpr 构造函数。
• 如果数据成员具有类内初始值设定项,则内置类型成员的初始值设定项必须是常量表达式,或者如果成员具有类类型,则初始值设定项必须使用成员自己的 constexpr 构造函数。
• 类必须对其析构函数使用默认定义,析构函数是销毁类类型的对象的成员
(来源:C++入门,第5版)
Q1。是的,你可以有你喜欢的任何方法(不包括有约束的构造函数/析构函数)。甚至包括virtual
方法,如果构造函数是constexpr
.
问题 2.正如您所说,定义该类型的constexpr
变量。 如果没有诊断消息(并且编译器符合要求),则该类型肯定是 LiteralType。 请注意,类型可能是文字,但代码由于其他原因导致编译失败。
对我来说,标准中的定义似乎比您引用的定义更清晰一些。例如,在某些情况下不需要constexpr
构造函数(例如闭包或聚合)。
相关文章:
- 函数作为模板参数,是否对返回类型强制约束
- 受约束的成员函数和显式模板实例化
- 在 C++20 中对概念约束函数进行排序的规则是什么?
- 如何使用 g2o 优化多约束函数
- 约束类模板函数以接受特定的 POD 类型
- 如何将从第 2 个字符开始的字符串作为函数中的参数传递以进行递归,并约束数据 tiee 是函数中的字符串?
- 如何在带有约束 (C++) 的函数中使用泛型类型
- 对构造函数调用的约束
- 非模板化函数上的约束表达式有什么意义?
- 文本类类型成员函数约束
- 为什么重载解析更喜欢不受约束的模板函数而不是更具体的模板函数?
- 对 std::Optional 的转发引用构造函数的约束
- 函数不受主内存约束的函数所需的复杂性是什么?
- 为白名单类型约束模板函数的更好方法,SFINAE
- 需要约束模板成员函数的概念定义
- 变量的cplex约束函数
- std::p air<> 的模板成员必须具有 const copy 构造函数。如何实现该约束
- 如何对构造函数的参数进行约束
- 从Arduino约束函数端口
- 具有异构构造函数约束的c++工厂模式