命名需求
来自 cppreference.com
< cpp
此页面列出的 *命名需求* 是 C++ 标准规范性文本中用来定义标准库期望的命名需求。
确保库模板使用满足这些需求的模板参数进行实例化的责任在于程序员。如果未能做到这一点,可能会导致非常复杂的编译器诊断。
其中一些需求在 C++20 中使用 概念 语言特性进行了形式化。
基本 | ||
指定该类型的对象可以进行默认构造 (命名需求) | ||
(C++11) |
指定该类型的对象可以从右值进行构造 (命名需求) | |
指定该类型的对象可以从左值进行构造 (命名需求) | ||
(C++11) |
指定该类型的对象可以从右值进行赋值 (命名需求) | |
指定该类型的对象可以从左值进行赋值 (命名需求) | ||
指定该类型的对象可以进行销毁 (命名需求) | ||
类型属性 | ||
注意:标准没有定义此子类别中指定的名称的命名需求。 这些是核心语言定义的类型类别。它们仅出于一致性而在此作为命名需求列出。 | ||
不是数组类型或类类型的对象类型 (命名需求) | ||
(在 C++20 中已弃用) |
POD(普通旧数据)类型,与 C struct 兼容 (命名需求) | |
(C++11) |
这些类型的对象在复制其底层字节后可以保留其值 (命名需求) | |
(C++11) |
这些类型的对象可以被平凡地构造和复制 (命名需求) | |
(C++11) |
这些类型可用于与用其他编程语言编写的代码进行通信 (命名需求) | |
这些类型的对象可以被隐式创建,并且它们的生命周期可以被隐式启动 (命名需求) | ||
库范围 | ||
布尔运算 (operator&&、operator|| 和 operator!) 具有通常的语义 (命名需求) | ||
operator== 是一个等价关系(命名需求) | ||
operator< 是一个严格弱排序关系(命名需求) | ||
可以使用非成员函数调用 swap() 进行交换 (命名需求) | ||
(C++11) |
一个 LegacyIterator,它解引用到一个 Swappable 类型 (命名需求) | |
(C++11) |
一个支持空值的指针型类型 (命名需求) | |
(C++11) |
一个 FunctionObject,对于具有不同值的输入,它具有较低的概率给出相同的输出 (命名需求) | |
包含分配信息的类类型 (命名需求) | ||
可以使用函数调用语法调用的对象 (命名需求) | ||
定义了调用操作的类型 (命名需求) | ||
一个 FunctionObject,它为一个参数返回一个可转换为 bool 的值,而不会修改它 (命名需求) | ||
一个 FunctionObject,它为两个参数返回一个可转换为 bool 的值,而不会修改它们 (命名需求) | ||
一个 BinaryPredicate,它建立了一个排序关系 (命名需求) |
Container | |
允许使用迭代器访问元素的数据结构 (命名需求) | |
使用双向迭代器的容器 (命名需求) | |
(C++11) |
使用分配器的容器 (命名需求) |
元素以线性方式存储的容器 (命名需求) | |
(C++17) |
元素存储在相邻内存地址的容器 (命名需求) |
通过将元素与键相关联来存储元素的容器 (命名需求) | |
通过将元素与键相关联来将元素存储在桶中的容器 (命名需求) | |
容器元素 | |
(C++11) |
元素可以在未初始化的存储空间中进行默认构造 (命名需求) |
(C++11) |
元素可以在未初始化的存储空间中进行复制构造 (命名需求) |
(C++11) |
元素可以在未初始化的存储空间中进行移动构造 (命名需求) |
(C++11) |
元素可以在未初始化的存储空间中进行构造 (命名需求) |
(C++11) |
元素可以使用分配器进行销毁 (命名需求) |
Iterator | |
访问某个数据结构中的数据的通用概念 (命名需求) | |
可用于读取数据的迭代器 (命名需求) | |
可用于写入数据的迭代器 (命名需求) | |
可用于多次读取数据的迭代器 (命名需求) | |
可以同时递增和递减的迭代器 (命名需求) | |
可以在恒定时间内前进的迭代器 (命名需求) | |
(C++17) |
指向连续分配元素的迭代器 (命名需求) |
(C++20) |
可在常量表达式求值期间使用的迭代器 (命名需求) |
流 I/O 函数 | |
一个流输入函数,它不跳过前导空白,并计算已处理的字符 (命名需求) | |
一个跳过前导空白的流输入函数 (命名需求) | |
一个基本的流输出函数 (命名需求) | |
一个在错误时设置 failbit 并返回对流的引用的流输出函数 (命名需求) | |
格式化程序 | |
(C++20) |
为给定的格式化参数类型和字符类型抽象格式化操作 (命名需求) |
(C++20) |
定义 格式化库 使用的函数 (命名需求) |
随机数生成 | |
(C++11) |
消耗整数序列并生成 32 位无符号值的序列 (命名需求) |
(C++11) |
返回均匀分布的随机无符号整数 (命名需求) |
(C++11) |
一个由种子定义的确定性 UniformRandomBitGenerator (命名需求) |
(C++11) |
一个将另一个 RandomNumberEngine 的输出进行转换的 RandomNumberEngine (命名需求) |
(C++11) |
返回根据给定的数学概率密度函数分布的随机数 (命名需求) |
并发 | |
(C++11) |
为执行代理(即线程)提供独占所有权语义 (命名需求) |
(C++11) |
一个支持尝试获取锁的 BasicLockable (命名需求) |
(C++11) |
一个支持定时获取锁的 Lockable (命名需求) |
(C++14) |
为执行代理(即线程)提供共享所有权语义 (命名需求) |
(C++14) |
一个支持定时获取锁的 SharedLockable (命名需求) |
(C++11) |
一个保护免受数据竞争和顺序一致同步的 Lockable (命名需求) |
(C++11) |
一个保护免受数据竞争和顺序一致同步的 TimedLockable (命名需求) |
(C++17) |
一个支持共享所有权语义的 Mutex (命名需求) |
(C++14) |
一个支持共享所有权语义的 TimedMutex (命名需求) |
范围 | |
(C++20) |
一个 FunctionObject,它从一个 范围适配器 和其他参数创建一个 viewable_range (命名需求) |
(C++20) |
一个支持管道运算符的 FunctionObject (命名需求) |
多维视图定制 | |
(C++23) |
控制 mdspan 中多维索引的映射 (命名需求) |
(C++23) |
一个包含 LayoutMapping 要求的策略 (命名需求) |
(C++23) |
一个控制访问 mdspan 中数据句柄的策略 (命名需求) |
其他 | |
(C++11) |
描述一个类型的属性 (命名需求) |
(C++11) |
描述两个类型之间的关系 (命名需求) |
(C++11) |
修改一个类型的属性 (命名需求) |
(C++11) |
聚合持续时间、时间点和函数以获取当前时间点 (命名需求) |
(C++11) |
一个 Clock,它不会抛出异常 (命名需求) |
为字符类型定义类型和函数 (命名需求) | |
位集、整数或枚举 (命名需求) | |
一个类型,其初始化实际上等于赋值 (命名需求) | |
(C++11) |
定义 正则表达式库 使用的类型和函数 (命名需求) |
(C++11) |
一个具有 constexpr 构造函数的类型 (命名需求) |
本节不完整 原因:还有其他缺失的必要条件吗? |