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 页)。
非类型萃取工具
前者用于创建对应类型的对象用于非评估环境的类型计算;后者用于获取对象的真实地址。