此页面中列出的具名要求,是 C++ 标准的规范性文本中使用的具名要求,用于定义标准库的期待。
某些具名要求在 C++20 中正在以概念语言特性进行形式化。在那之前,确保以满足这些要求的模板实参实例化标准库模板是程序员的重担。若不这么做,则可能导致非常复杂的编译器诊断。
基本概念 | |
DefaultConstructible可默认构造 | 指定该类型对象可以默认构造 (具名要求) |
MoveConstructible可移动构造 (C++11) | 指定该类型对象可以从右值构造 (具名要求) |
CopyConstructible可复制构造 | 指定该类型对象可以从左值构造 (具名要求) |
MoveAssignable可移动赋值 (C++11) | 指定该类型对象可以从右值赋值 (具名要求) |
CopyAssignable可复制赋值 | 指定该类型对象可以从左值赋值 (具名要求) |
Destructible可析构 | 指定该对象可以析构 (具名要求) |
?
基本概念 | |
DefaultConstructible可默认构造 | 指定该类型对象可以默认构造 (具名要求) |
MoveConstructible可移动构造 (C++11) | 指定该类型对象可以从右值构造 (具名要求) |
CopyConstructible可复制构造 | 指定该类型对象可以从左值构造 (具名要求) |
MoveAssignable可移动赋值 (C++11) | 指定该类型对象可以从右值赋值 (具名要求) |
CopyAssignable可复制赋值 | 指定该类型对象可以从左值赋值 (具名要求) |
Destructible可析构 | 指定该对象可以析构 (具名要求) |
?
全库范围的概念 | |
EqualityComparable可相等比较 | operator== 是一种等价关系(具名要求) |
LessThanComparable可小于比较 | operator< 是一种严格弱序关系(具名要求) |
Swappable可交换 (C++11) | 可用无限定的非成员函数调用 swap() 进行交换的类型 (具名要求) |
ValueSwappable值可交换 (C++11) | 解引用为某种可交换 (Swappable) 类型的遗留迭代器 (LegacyIterator) (具名要求) |
NullablePointer可空指针 (C++11) | 支持空值的指针式类型 (具名要求) |
Hash散列 (C++11) | 函数对象 (FunctionObject) ,对于不同输入值产生相同输出具有很低概率 (具名要求) |
Allocator分配器 | 包含分配信息的类类型 (具名要求) |
FunctionObject函数对象 | 能以函数调用语法进行调用的对象 (具名要求) |
Callable可调用 | 定义了调用操作的类型 (具名要求) |
Predicate谓词 | 函数对象 (FunctionObject) ,对于一个实参,返回一个可转换为 bool 的值而不改动实参 (具名要求) |
BinaryPredicate二元谓词 | 函数对象 (FunctionObject) ,对于两个实参,返回一个可转换为 bool 的值而不改动各实参 (具名要求) |
Compare比较 | 建立一种顺序关系的二元谓词 (BinaryPredicate) (具名要求) |
?
容器 | |
Container容器 | 允许通过迭代器访问元素的数据结构 (具名要求) |
ReversibleContainer可逆容器 | 使用双向迭代器的容器 (具名要求) |
AllocatorAwareContainer具分配器容器 (C++11) | 使用分配器的容器 (具名要求) |
SequenceContainer序列容器 | 线性存储各元素的容器 (具名要求) |
ContiguousContainer连续容器 (C++17) | 在相邻内存地址中存储各元素的容器 (具名要求) |
AssociativeContainer关联容器 | 将元素与键相关联而存储它们的容器 (具名要求) |
UnorderedAssociativeContainer无序关联容器 (C++11) | 将元素与键关联并将它们存储于桶中的容器 (具名要求) |
?
容器元素 | |
DefaultInsertable可默认插入 (C++11) | 可在未初始化存储中默认构造的元素 (具名要求) |
CopyInsertable可复制插入 (C++11) | 可在未初始化存储中复制构造的元素 (具名要求) |
MoveInsertable可移动插入 (C++11) | 可在未初始化存储中移动构造的函数 (具名要求) |
EmplaceConstructible可就位构造 (C++11) | 可在未初始化存储中构造的元素 (具名要求) |
Erasable可擦除 (C++11) | 可用分配器销毁的元素 (具名要求) |
迭代器 | |
LegacyIterator遗留迭代器 | 在一些数据结构内访问数据的通用概念 (具名要求) |
LegacyInputIterator遗留输入迭代器 | 可用于读数据的迭代器 (具名要求) |
LegacyOutputIterator遗留输出迭代器 | 可用于写数据的迭代器 (具名要求) |
LegacyForwardIterator遗留向前迭代器 | 可用于多次读数据的迭代器 (具名要求) |
LegacyBidirectionalIterator遗留双向迭代器 | 可增可减的迭代器 (具名要求) |
LegacyRandomAccessIterator遗留随机访问迭代器 | 可在常数时间内增加的迭代器 (具名要求) |
LegacyContiguousIterator遗留连续迭代器 (C++17) | 指向连续分配元素的迭代器 (具名要求) |
ConstexprIterator常量表达式迭代器 (C++20) | 能在常量表达式求值中使用的迭代器 (具名要求) |
?
流 I/O 函数 | |
UnformattedInputFunction无格式输入函数 | 不跳过前导空格并对处理字符计数的流输入函数 (具名要求) |
FormattedInputFunction有格式输入函数 | 跳过前导空格的流输入函数 (具名要求) |
UnformattedOutputFunction无格式输出函数 | 基本流输出函数 (具名要求) |
FormattedOutputFunction有格式输出函数 | 出错时设置失败位并返回流引用的流输出函数 (具名要求) |
随机数生成 | |
SeedSequence种子序列 (C++11) | 消耗一个整数序列,产出一个 32 位无符号值的序列 (具名要求) |
UniformRandomBitGenerator均匀随机位生成器 (C++11) | 返回均匀分布的随机无符号整数 (具名要求) |
RandomNumberEngine随机数引擎 (C++11) | 由种子定义的确定性均匀随机位生成器 (UniformRandomBitGenerator) (具名要求) |
RandomNumberEngineAdaptor随机数引擎适配器 (C++11) | 对另一个随机数引擎 (RandomNumberEngine) 的输出进行变换的随机数引擎 (RandomNumberEngine) (具名要求) |
RandomNumberDistribution随机数分布 (C++11) | 返回服从给定数学概率密度函数分布的随机数 (具名要求) |
?
并发 | |
BasicLockable基本可锁定 (C++11) | 为执行代理(即线程)提供排他所有权语义 (具名要求) |
Lockable可锁定 (C++11) | 支持尝试进行锁获取基本可锁定 (BasicLockable) (具名要求) |
TimedLockable可定时锁定 (C++11) | 支持定时锁获取的可锁定 (Lockable) (具名要求) |
Mutex互斥体 (C++11) | 提供免受数据竞争的保护和顺序一致同步操作的可锁定 (Lockable) (具名要求) |
TimedMutex定时互斥体 (C++11) | 提供免受数据竞争的保护和顺序一致同步操作的可定时锁定 (TimedLockable) (具名要求) |
SharedMutex共享互斥体 (C++17) | 支持共享所有权语义的互斥体 (Mutex) (具名要求) |
SharedTimedMutex共享定时互斥体 (C++14) | 支持共享所有权语义的定时互斥体 (TimedMutex) (具名要求) |
?
其他 | |
UnaryTypeTrait一元类型特征 (C++11) | 描述一个类型的一项性质 (具名要求) |
BinaryTypeTrait二元类型特征 (C++11) | 描述两个类型间的一种关系 (具名要求) |
TransformationTrait变换特征 (C++11) | 修改一个类型的一项性质 (具名要求) |
Clock时钟 (C++11) | 聚合一种时长,一种时间点,和一个获取当前时间点的函数 (具名要求) |
TrivialClock平凡时钟 (C++11) | 不抛异常的时钟 (Clock) (具名要求) |
CharTraits字符特征 | 为字符类型定义一些类型和函数 (具名要求) |
BitmaskType位掩码类型 | 位集合、整数或枚举 (具名要求) |
NumericType数值类型 | 初始化效率相当于赋值的类型 (具名要求) |
RegexTraits正则表达式特征 (C++11) | 定义正则表达式库所使用的各个类型和函数 (具名要求) |
LiteralType字面类型 (C++11) | 拥有 constexpr 构造函数的类型 (具名要求) |