命名要求
来自 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) |
一个解引用为Swappable类型的LegacyIterator (命名要求) | |
(C++11) |
支持空值的类指针类型 (命名要求) | |
(C++11) |
一个FunctionObject,对于不同值的输入,产生相同输出的概率很低 (命名要求) | |
包含分配信息的类类型 (命名要求) | ||
可以使用函数调用语法调用的对象 (命名要求) | ||
定义了 invoke 操作的类型 (命名要求) | ||
一个FunctionObject,对于一个参数,在不修改它的情况下返回一个可转换为bool的值 (命名要求) | ||
一个FunctionObject,对于两个参数,在不修改它们的情况下返回一个可转换为bool的值 (命名要求) | ||
一个建立序关系的BinaryPredicate (命名要求) |
Container(容器) | |
允许使用迭代器访问元素的数据结构 (命名要求) | |
使用双向迭代器的容器 (命名要求) | |
使用分配器的容器 (命名要求) | |
元素线性存储的容器 (命名要求) | |
(C++17) |
元素存储在相邻内存地址的容器 (命名要求) |
通过将元素与键关联来存储元素的容器 (命名要求) | |
通过将元素与键关联,并存储在桶中的容器 (命名要求) | |
容器元素 | |
(C++11) |
元素可以在未初始化存储中默认构造 (命名要求) |
(C++11) |
元素可以在未初始化存储中复制构造 (命名要求) |
(C++11) |
元素可以在未初始化存储中移动构造 (命名要求) |
(C++11) |
元素可以在未初始化存储中构造 (命名要求) |
(C++11) |
元素可以使用分配器销毁 (命名要求) |
迭代器 (Iterator) | |
访问某些数据结构内数据的通用概念 (命名要求) | |
可用于读取数据的迭代器 (命名要求) | |
可用于写入数据的迭代器 (命名要求) | |
可用于多次读取数据的迭代器 (命名要求) | |
可递增和递减的迭代器 (命名要求) | |
可在常数时间内前进的迭代器 (命名要求) | |
指向连续分配元素的迭代器 (命名要求) | |
(C++20) |
可在常量表达式求值期间使用的迭代器 (命名要求) |
流I/O函数 | |
一个不跳过前导空格并计算已处理字符的流输入函数 (命名要求) | |
一个跳过前导空格的流输入函数 (命名要求) | |
一个基本的流输出函数 (命名要求) | |
一个在出错时设置failbit并返回流引用的流输出函数 (命名要求) | |
格式化器 | |
(C++20) |
抽象给定格式化参数类型和字符类型的格式化操作 (命名要求) |
(C++20) |
定义格式化库使用的函数 (命名要求) |
随机数生成 | |
(C++11) |
消耗一个整数序列并生成一个32位无符号值序列 (命名要求) |
返回均匀分布的随机无符号整数 (命名要求) | |
(C++11) |
一个由种子定义的确定性UniformRandomBitGenerator (命名要求) |
一个转换另一个RandomNumberEngine输出的RandomNumberEngine (命名要求) | |
根据给定数学概率密度函数返回随机数 (命名要求) | |
并发 | |
(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 和额外参数创建一个范围适配器(命名要求) |
一个支持管道运算符的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 构造函数的类型 (命名要求) |
本节不完整 原因:还有其他缺失的要求吗? |