类型支持
(类型系统综述可参阅类型)
语言定义的基础类型
附加性基本类型及宏
定义于头文件 |
|
size_t |
sizeof 运算符返回的无符号整数类型 (typedef) |
ptrdiff_t |
在两个指针相减时返回的有符号整数类型 (typedef) |
nullptr_t (C++11) |
空指针字面量 nullptr 的类型 (typedef) |
NULL |
实现定义的空指针常量 (宏常量) |
max_align_t (C++11) |
内存对齐需求不小于任何基本类型的平凡类型 (typedef) |
offsetof |
标准布局类型的成员相对类型起始地址的字符偏移量 (宏函数) |
byte (C++17) |
字节类型 (枚举) |
定义于头文件 |
|
定义于头文件 |
|
__bool_true_false_are_defined (C++11) |
C 兼容用宏常量,展开成整数常量1 (宏常量) |
定义于头文件 |
|
定义于头文件 |
|
__alignas_is_defined (C++11) |
C 兼容用宏常量,展开成整数常量 1 (宏常量) |
定宽整数(C++11 起)
定义于头文件 |
|
numeric_limits |
提供查询所有基础数字类型属性的接口。 (类模板) |
C 数值极限接口
定义于头文件 |
|
type_info |
含有编译器生成的某类型的信息。 这是 typeid 运算符所返回的类。 (类) |
bad_typeid |
若 typeid 表达式中的参数为空指针则抛出的异常 (类) |
bad_cast |
非法的 dynamic_cast 表达式,即引用类型转型失败抛出的异常 (类) |
定义于头文件 |
|
type_index (C++11) |
针对 type_info 对象的包装,它能用作关联容器和无序关联容器的索引。 (类) |
类型特性定义一个编译时基于模板的结构,以查询或修改类型的属性。
试图特化定义于
头文件的模板导致未定义行为,除了 std::common_type 可依照其所描述特化。
定义于
头文件的模板可以用不完整类型实例化,除非另外有指定,尽管通常禁止以不完整类型实例化标准库模板。
类型属性
定义于头文件 |
|
基础类型类别 |
|
is_void (C++11) |
检查类型是否为 void (类模板) |
is_null_pointer (C++14) |
检查类型是否为 std::nullptr_t (类模板) |
is_integral (C++11) |
检查类型是否为整型 (类模板) |
is_floating_point (C++11) |
检查类型是否是浮点类型 (类模板) |
is_array (C++11) |
检查类型是否是数组类型 (类模板) |
is_enum (C++11) |
检查类型是否是枚举类型 (类模板) |
is_union (C++11) |
检查类型是否联合体类型 (类模板) |
is_class (C++11) |
检查类型是否非联合类类型 (类模板) |
is_function (C++11) |
检查是否为函数类型 (类模板) |
is_pointer (C++11) |
检查类型是否为指针类型 (类模板) |
is_lvalue_reference (C++11) |
检查类型是否左值引用 (类模板) |
is_rvalue_reference (C++11) |
检查类型是否右值引用 (类模板) |
is_member_object_pointer (C++11) |
检查类型是否为指向非静态成员对象的指针 (类模板) |
is_member_function_pointer (C++11) |
检查类型是否为指向非静态成员函数的指针 (类模板) |
复合类型类别 |
|
is_fundamental (C++11) |
检查是否是基础类型 (类模板) |
is_arithmetic (C++11) |
检查类型是否为算术类型 (类模板) |
is_scalar (C++11) |
检查类型是否为标量类型 (类模板) |
is_object (C++11) |
检查是否是对象类型 (类模板) |
is_compound (C++11) |
检查是否是一个复合类型 (类模板) |
is_reference (C++11) |
检查类型是否为左值引用或右值引用 (类模板) |
is_member_pointer (C++11) |
检查类型是否为指向非静态成员函数或对象的指针类型 (类模板) |
类型属性 |
|
is_const (C++11) |
检查类型是否为 const 限定 (类模板) |
is_volatile (C++11) |
检查类型是否为 volatile 限定 (类模板) |
is_trivial (C++11) |
检查类型是否平凡 (类模板) |
is_trivially_copyable (C++11) |
检查类型是否可平凡复制 (类模板) |
is_standard_layout (C++11) |
检查是否是一个标准布局类型 (类模板) |
is_pod (C++11)(C++20 中弃用) |
检查类型是否为简旧数据( POD )类型 (类模板) |
is_literal_type (C++11)(C++17 中弃用) |
检查类型是否为字面类型 (类模板) |
has_unique_object_representations (C++17) |
检查是否该类型对象的每一位都对其值有贡献 (类模板) |
is_empty (C++11) |
检查类型是否类(但非联合体)类型且无数据 (类模板) |
is_polymorphic (C++11) |
检查类型是否为多态类类型 (类模板) |
is_abstract (C++11) |
检查类型是否为抽象类类型 (类模板) |
is_final (C++14) |
检查类型是否为 final 类类型 (类模板) |
is_aggregate (C++17) |
检查类型是否聚合类型 (类模板) |
is_signed (C++11) |
检查类型是否为有符号算术类型 (类模板) |
is_unsigned (C++11) |
检查类型是否为无符号算术类型 (类模板) |
受支持操作 |
|
is_constructible (C++11) |
检查对象是否实现了特定参数的构造函数 (类模板) |
is_default_constructible (C++11) |
检查类型是否有默认构造函数 (类模板) |
is_copy_constructible (C++11) |
检查类型是否拥有复制构造函数 (类模板) |
is_move_constructible (C++11) |
检查类型是否能从右值引用构造 (类模板) |
is_assignable (C++11) |
检查类型是否拥有指定参数的赋值运算符 (类模板) |
is_copy_assignable (C++11) |
检查类型是否拥有复制赋值运算符 (类模板) |
is_move_assignable (C++11) |
检查类型是否有拥有移动赋值运算符 (类模板) |
is_destructible (C++11) |
检查类型是否拥有未被删除的析构函数 (类模板) |
has_virtual_destructor (C++11) |
检查类型是否拥有虚析构函数 (类模板) |
is_swappable_with (C++17) |
检查一个类型的对象是否能与同类型或不同类型的对象交换 (类模板) |
属性查询 |
|
alignment_of (C++11) |
获取类型的最小对齐字节数 (类模板) |
rank (C++11) |
获取数组类型的维数 (类模板) |
extent (C++11) |
获取数组类型在指定维度的大小 (类模板) |
类型关系 |
|
is_same (C++11) |
检查两个类型是否相同 (类模板) |
is_base_of (C++11) |
检查一个类型是否派生自另一个类型 (类模板) |
is_convertible (C++11) |
检查是否能转换一个类型为另一类型 (类模板) |
is_invocable (C++17) |
检查类型能否被以指定参数类型调用(如同以 std::invoke ) (类模板) |
类型修改
类型修改模板通过应用修改到模板参数,创建新类型定义。结果类型可以通过成员 typedef type
访问。
定义于头文件 |
|
常-易变性指定器 |
|
remove_cv (C++11) |
从给定类型移除 const 或/与 volatile 限定符 (类模板) |
add_cv (C++11) |
添加 const 或/与 volatile 限定符到给定类型 (类模板) |
引用 |
|
remove_reference (C++11) |
从给定类型移除引用 (类模板) |
add_lvalue_reference (C++11) |
添加左值或右值引用到指定类型 (类模板) |
指针 |
|
remove_pointer (C++11) |
移除类型的指针修饰符 (类模板) |
add_pointer (C++11) |
为类型添加指针修饰符 (类模板) |
符号修改器 |
|
make_signed (C++11) |
将整数类型转换成对应的有符号整数类型 (类模板) |
make_unsigned (C++11) |
将整数类型转换成对应的无符号整数类型 (类模板) |
数组 |
|
remove_extent (C++11) |
从给定数组类型移除一个维度 (类模板) |
remove_all_extents (C++11) |
移除数组类型所有维度 (类模板) |
杂项变换
定义于头文件 |
|
aligned_storage (C++11) |
定义适用作给定大小的类型的未初始化存储的类型 (类模板) |
aligned_union (C++11) |
定义所有给定类型在未初始化时需要的最大内存空间大小 (类模板) |
decay (C++11) |
将类型变换成以值形式传递给函数时使用的类型 (类模板) |
remove_cvref (C++20) |
将 std::remove_cv 与 std::remove_reference 结合 (类模板) |
enable_if (C++11) |
根据编译期布尔常量隐藏一种函数重载或模板特化 (类模板) |
conditional (C++11) |
基于编译时布尔值选择一个类型或另一个 (类模板) |
common_type (C++11) |
确定一组类型的共用类型 (类模板) |
common_reference (C++20) |
确定类型组的共用引用类型 (类模板) |
underlying_type (C++11) |
获取枚举常量对应的整数类型 (类模板) |
result_of (C++11)(C++20 中移除) |
推导以参数集调用可调用对象的结果类型 (类模板) |
void_t (C++17) |
void 变参数别名模板 (别名模板) |
type_identity (C++20) |
返回不更改的类型实参 (类模板) |
特性上的运算
定义于头文件 |
|
conjunction (C++17) |
变参数的逻辑与元函数 (类模板) |
disjunction (C++17) |
变参数的逻辑或元函数 (类模板) |
negation (C++17) |
逻辑非元函数 (类模板) |
辅助类
定义于头文件 |
|
integral_constant (C++11) |
可指定类型的编译期常量 (类模板) |
标准提供 std::integral_constant 对类型 bool 的二个特化:
定义于头文件 |
|
类型 | 定义 |
true_type |
std::integral_constant |
false_type |
std::integral_constant |
定义于头文件 |
|
类型 | 定义 |
endian (C++20) |
指示标量类型的端序 (枚举) |