命名要求
此页面上列出的命名要求是 C++ 标准规范文本中用于定义标准库期望的命名要求。
其中一些要求正在 C++20 中使用概念语言特性进行形式化。在此之前,程序员有责任确保库模板使用满足这些要求的模板参数进行实例化。否则可能导致非常复杂的编译器诊断。
基本
公共 | DefaultConstructible | 指定该类型的对象可以默认构造 |
公共 | MoveConstructible(C++11) | 指定该类型的对象可以从右值构造 |
公共 | CopyConstructible | 指定该类型的对象可以从左值构造 |
公共 | MoveAssignable(C++11) | 指定该类型的对象可以从右值赋值 |
公共 | CopyAssignable | 指定该类型的对象可以从左值赋值 |
公共 | Destructible | 指定该类型的对象可以被销毁 |
类型属性
注意:标准没有定义此子类别中指定名称的命名要求。这些是核心语言定义的类型类别。它们仅为保持一致性而作为命名要求包含在此处。
公共 | ScalarType | 非数组类型或类类型的对象类型 |
公共 | PODType (在 C++20 中已弃用) | POD (Plain Old Data) 类型,与 C struct 兼容 |
公共 | TriviallyCopyable(C++11) | 这些类型的对象在复制其底层字节后仍能保持其值 |
公共 | TrivialType(C++11) | 这些类型的对象可以被平凡构造和复制 |
公共 | StandardLayoutType(C++11) | 这些类型对于与其他编程语言编写的代码进行通信很有用 |
公共 | ImplicitLifetimeType | 这些类型的对象可以隐式创建,并且它们的生命周期可以隐式开始 |
库范围
公共 | EqualityComparable | operator== 是一个等价关系 |
公共 | LessThanComparable | operator< 是一个严格弱序关系 |
公共 | Swappable | 可以通过不限定的非成员函数调用 swap() 进行交换 |
公共 | ValueSwappable(C++11) | 一个解引用为 Swappable 类型的 LegacyIterator |
公共 | NullablePointer(C++11) | 一种支持空值的指针类型 |
公共 | Hash(C++11) | 一个 FunctionObject,对于不同的输入值,产生相同输出的概率很低 |
公共 | Allocator | 包含分配信息的类类型 |
公共 | FunctionObject | 可以使用函数调用语法调用的对象 |
公共 | Callable | 定义了调用操作的类型 |
公共 | Predicate | 一个 FunctionObject,对于一个参数,在不修改它的情况下返回一个可转换为 bool 的值 |
公共 | BinaryPredicate | 一个 FunctionObject,对于两个参数,在不修改它们的情况下返回一个可转换为 bool 的值 |
公共 | Compare | 一个建立排序关系的 BinaryPredicate |
容器
公共 | 容器 | 允许使用迭代器访问元素的数据结构 |
公共 | 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 函数
公共 | 非格式化输入函数 | 一个不跳过前导空格并计算已处理字符的流输入函数 |
公共 | 格式化输入函数 | 一个跳过前导空格的流输入函数 |
公共 | 非格式化输出函数 | 一个基本的流输出函数 |
公共 | 格式化输出函数 | 一个在错误时设置 failbit 并返回流引用的流输出函数 |
格式化程序
公共 | BasicFormatter(C++20) | 抽象给定格式化参数类型和字符类型的格式化操作 |
公共 | Formatter(C++20) | 定义格式化库使用的函数 |
随机数生成
公共 | 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 |
公共 | SharedLockable(C++14) | 为执行代理(即线程)提供共享所有权语义 |
公共 | SharedTimedLockable(C++14) | 一个支持定时获取锁的 SharedLockable |
公共 | Mutex(C++11) | 一个防止数据竞争和顺序一致性同步的 Lockable |
公共 | TimedMutex(C++11) | 一个防止数据竞争和顺序一致性同步的 TimedLockable |
公共 | (C++17) | 一个支持共享所有权语义的 Mutex |
公共 | SharedTimedMutex(C++14) | 一个支持共享所有权语义的 TimedMutex |
范围
公共 | RangeAdaptorObject(C++20) | 一个从 viewable_range 和额外参数创建范围适配器的 FunctionObject |
公共 | RangeAdaptorClosureObject(C++20) | 一个支持管道操作符的 FunctionObject |
其他
公共 | 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 构造函数的类型 |