具名要求
出自 cppreference.cn
< cpp
本页列出的具名要求是在 C++ 标准的规范性文本中使用的具名要求,用于定义标准库的预期。
程序员有责任确保库模板使用满足这些要求的模板实参进行实例化。否则可能会导致非常复杂的编译器诊断信息。
其中一些要求在 C++20 中使用概念语言特性进行了形式化。
基本 | ||
指定该类型的对象可以默认构造 (具名要求) | ||
(C++11) |
指定该类型的对象可以从右值构造 (具名要求) | |
指定该类型的对象可以从左值构造 (具名要求) | ||
(C++11) |
指定该类型的对象可以从右值赋值 (具名要求) | |
指定该类型的对象可以从左值赋值 (具名要求) | ||
指定该类型的对象可以销毁 (具名要求) | ||
类型属性 | ||
注意:标准未定义在此子类别中指定的具名要求。 这些是由核心语言定义的类型类别。 它们在此处作为具名要求仅是为了保持一致性。 | ||
不是数组类型或类类型的对象类型 (具名要求) | ||
(在 C++20 中已弃用) |
POD(Plain Old Data,纯旧数据)类型,与 C struct 兼容 (具名要求) | |
(C++11) |
这些类型的对象在复制其底层字节后可以保持其值 (具名要求) | |
(C++11)(在 C++26 中已弃用) |
这些类型的对象可以被平凡地构造和复制 (具名要求) | |
(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 构造函数的类型 (具名要求) |
本节尚不完整 原因:还有其他遗漏的要求吗? |