CTTCG 附录 D Standard Type Utilities

这一章介绍的大都是用来查询类型属性的 type traits。还有一些其他的工具。

按数据概念分类

下面是基本(primary)类型,范围都是互斥的,而且任何一个类型必然使得下面中的一个且仅有一个评估为真:

(C++14 之前没有 is_null_pointer,所以那个时候 nullptr 的类型 std:: nullptr_t 是个特例。)

上面的类型判断的时候会忽略外层的 cv 属性。图来自书中 Table D.1. Traits to Check the Primary Type Category

还有一些复合分类,这里省略。

Table D.2. Traits to Check for Composite Type Category

查询特定属性

Table D.3. Traits to Test Simple Type Properties

比如判断是否为 pod、抽象类、final 类等。

std::is_pod 被标记为过时,建议使用 is_standard_layout_v && is_trivial_v 两个 trait 组合起来判断。

查询是否具有某个特定操作

Table D.4. Traits to Check for Specific Operations

比如能够复制构造、能够复制赋值等。

判断类型之间关系

Table D.5. Traits to Test Type Relationships

比如 std::is_base_of

类型构造

Table D.6. Traits for Type Construction

比如加引用、去掉 cv 属性之类的。得到的是新类型,而不是 true 或 false 的回答。

其他

图出自 Table D.7. Other Type Traits

逻辑运算

图来自 PDF 第 770 页(书中页码 735 页)。

非类型萃取工具

前者用于创建对应类型的对象用于非评估环境的类型计算;后者用于获取对象的真实地址。