Named Requirements
From cppreference.net
<
cpp
named requirements 是 C++ 标准规范性文本中用于定义标准库期望的具名要求。
确保库模板使用满足这些要求的模板参数进行实例化的责任在于程序员。未能这样做可能导致非常复杂的编译器诊断信息。
其中部分要求已通过 concepts 语言特性在 C++20 中正式规范化。
基础概念 |
||
|
指定该类型的对象可以被默认构造
(命名要求) |
||
|
(C++11)
|
指定该类型的对象可以从右值构造
(命名要求) |
|
|
指定该类型的对象可以从左值构造
(命名要求) |
||
|
(C++11)
|
指定该类型的对象可以从右值进行赋值
(命名要求) |
|
|
指定该类型的对象可以从左值进行赋值
(命名要求) |
||
|
规定该类型的对象可以被销毁
(命名要求) |
||
类型属性 |
||
|
注意:标准未定义此子类别中指定名称的命名要求。
这些是由核心语言定义的类型类别。为保持一致性,此处将其作为命名要求包含在内。 |
||
|
非数组类型或类类型的对象类型
(命名要求) |
||
|
(C++20 中已弃用)
|
与 C 语言兼容的 POD(原生旧数据类型)
struct
(具名要求) |
|
|
(C++11)
|
该类型对象在复制其底层字节后仍能保持其数值
(命名要求) |
|
|
(C++11)
(C++26 中已弃用)
|
这些类型的对象可以平凡构造和复制
(命名要求) |
|
|
(C++11)
|
这些类型在与使用其他编程语言编写的代码进行通信时非常有用
(命名要求) |
|
|
这些类型的对象可以被隐式创建,其生命周期可以隐式开始
(命名要求) |
||
库级范围 |
||
|
布尔运算 (
operator
&&
,
operator
||
和
operator
!
) 具有常规语义
(命名要求) |
||
operator==
是等价关系
(命名要求) |
||
operator<
是严格弱序关系
(命名要求) |
||
|
可通过非限定非成员函数调用
swap
(
)
(命名要求) |
||
|
(C++11)
|
一个解引用结果为
Swappable
类型的
LegacyIterator
(命名要求) |
|
|
(C++11)
|
支持空值的指针式类型
(命名要求) |
|
|
(C++11)
|
一个
FunctionObject
对于不同输入值具有较低概率产生相同输出
(命名要求) |
|
|
包含分配信息的类类型
(命名要求) |
||
|
可使用函数调用语法进行调用的对象
(命名要求) |
||
|
定义了调用操作的类型
(命名要求) |
||
|
一个
FunctionObject
在不修改参数的情况下,返回可转换为
bool
的值
(命名要求) |
||
|
一个
FunctionObject
在不修改两个参数的情况下返回可转换为
bool
的值
(命名要求) |
||
|
一个
BinaryPredicate
用于建立排序关系
(命名要求) |
||
容器 |
|
|
允许使用迭代器进行元素访问的数据结构
(命名要求) |
|
|
使用双向迭代器的容器
(命名要求) |
|
|
(C++11)
|
使用分配器的容器
(命名要求) |
|
以线性方式存储元素的容器
(命名要求) |
|
|
(C++17)
|
元素存储在相邻内存地址的容器
(命名要求) |
|
通过键关联存储元素的容器
(命名要求) |
|
|
(C++11)
|
通过将元素与键关联存储在桶中的容器
(命名要求) |
容器元素 |
|
|
(C++11)
|
元素可在未初始化的存储中默认构造
(命名要求) |
|
(C++11)
|
元素可在未初始化的存储中通过拷贝构造进行初始化
(命名要求) |
|
(C++11)
|
元素可在未初始化存储中通过移动构造方式创建
(命名要求) |
|
(C++11)
|
元素可在未初始化存储中构造
(命名要求) |
|
(C++11)
|
可使用分配器销毁元素
(命名要求) |
迭代器 |
|
|
用于访问某些数据结构中数据的通用概念
(命名要求) |
|
|
可用于读取数据的迭代器
(命名要求) |
|
|
可用于写入数据的迭代器
(命名要求) |
|
|
可多次读取数据的迭代器
(命名要求) |
|
|
可递增也可递减的迭代器
(命名要求) |
|
|
可在常数时间内前进的迭代器
(命名要求) |
|
|
(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 构造函数的类型
(命名要求) |
|
本部分内容尚不完整
原因:是否还有其他遗漏要求? |