Named Requirements
      From cppreference.net
     
     
      
       <
       
        cpp
       
      
     
     本页面列出的 具名要求 是C++标准规范性文本中用于定义标准库期望所使用的具名要求。
确保库模板使用满足这些要求的模板参数进行实例化的责任在于程序员。未能这样做可能导致非常复杂的编译器诊断信息。
其中部分要求通过 C++20 的 concepts 语言特性进行了形式化规范。
| 
 基础概念 | ||
| 指定该类型的对象可以被默认构造 (命名要求) | ||
| 
           
            
             
              (C++11)
             
            
           
           | 指定该类型的对象可以从右值构造 (命名要求) | |
| 指定该类型的对象可以从左值构造 (命名要求) | ||
| 
           
            
             
              (C++11)
             
            
           
           | 指定该类型的对象可以从右值赋值 (命名要求) | |
| 指定该类型的对象可以从左值赋值 (命名要求) | ||
| 指定该类型的对象可以被销毁 (命名要求) | ||
| 类型属性 | ||
| 注意:标准未在此子类别中定义具有指定名称的命名要求。 这些是由核心语言定义的类型类别。它们在此处作为命名要求包含仅为了保持一致性。 | ||
| 非数组类型或类类型的对象类型 (命名要求) | ||
| 
           
            
             
              (C++20中弃用)
             
            
           
           | POD(普通旧数据)类型,与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 (命名要求) | |
| 包含分配信息的类类型 (命名要求) | ||
| 可以使用函数调用语法调用的对象 (命名要求) | ||
| 定义了调用操作的类型 (命名要求) | ||
| 对于单个参数返回可转换为
         
          
           bool
          
         
         的值且不修改该参数的
         
          
           FunctionObject (命名要求) | ||
| 对于两个参数返回可转换为 bool 的值且不修改 | ||
| 容器 | |
| 允许使用迭代器访问元素的数据结构 (具名要求) | |
| 使用双向迭代器的容器 (具名要求) | |
| 
           
            
             
              (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 输出的<a href="../named_req/RandomNumberEngine.html" title="cpp/named req/Random | 
| 本节内容尚不完整 原因:是否还有其他遗漏要求? |