c++ - 文字类类型成员函数约束

标签 c++

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

我有两个问题

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/

相关文章:

c++ - 将 QByteArray 从大端转换为小端

c++ - 将 std::ptr_fun 用于成员函数

c++ - 用于将字符串放入整数的 cin 失败标志

C++ 如何向字段添加额外信息

c++ - 我可以抛出一个 unique_ptr 吗?

c++ - float 减法问题

c++ - 结构的 cudaMalloc 和相同结构的元素

c++ - 在C++中获取行函数无法正常工作

具有不同接口(interface)的 C++ 适配器,其中接口(interface)可能具有不同类型/数量的输入参数

c++ - boost 迭代器适配器的编译器错误