std:: basic_const_iterator
| 
           定义于头文件
            
            
             <iterator>
            
            | ||
| 
           
            
             template
            
            
             <
            
            
             
              std::
              
               input_iterator
              
             
            
            Iter
            
             >
            
             class basic_const_iterator ; | (C++23 起) | |
       
        std::basic_const_iterator
       
       是一种迭代器适配器,其行为与底层迭代器(必须至少满足
       
        
         LegacyInputIterator
        
       
       或建模
       
        
         input_iterator
        
       
       )完全一致,区别在于解引用操作会将底层迭代器返回的值转换为不可变形式。
       
        std::basic_const_iterator
       
       的特化版本是常量迭代器,这意味着该迭代器永远不能用作输出迭代器,因为不允许修改元素。
      
| 目录 | 
成员类型
| 成员类型 | 定义 | 
| 
          iterator_category
         (有条件存在) | 
          若
           
 
          否则,不存在
           | 
| 
          iterator_concept
          | 
 | 
| 
          value_type
          | std:: iter_value_t < Iter > | 
| 
          difference_type
          | std:: iter_difference_t < Iter > | 
| 
          
           reference
          
         (私有) | std::
            
             iter_const_reference_t
            
           
          
          
           <
          
          Iter
          
           > ( 仅用于说明的成员类型* ) | 
成员对象
| 成员名称 | 定义 | 
| 
          
           current
          
         (私有) | 基础迭代器, 
           base()
          从其复制或移动( 仅用于说明的成员对象* ) | 
成员函数
| 构造新的 
          basic_const_iterator
         (公开成员函数) | |
| 访问底层迭代器 (公开成员函数) | |
| 访问指向的元素 (公开成员函数) | |
| 通过索引访问元素 (公开成员函数) | |
| 前进或回退迭代器 (公开成员函数) | |
| 转换为底层迭代器可转换到的任何常量迭代器 (公开成员函数) | |
| 比较底层迭代器 (公开成员函数) | 
非成员函数
| 比较 
          basic_const_iterator
         与非
          basic_const_iterator
         (函数模板) | |
| 
           
            
             
              (C++23)
             
            
           
           | 前进或回退迭代器 (函数模板) | 
| 
           
            
             
              (C++23)
             
            
           
           | 计算两个迭代器适配器间的距离 (函数模板) | 
| 
           
            
             
              (C++23)
             
            
           
           | 将底层迭代器解引用结果转换为其关联的右值引用类型 (函数) | 
辅助类
| 确定迭代器与适配的 
          basic_const_iterator
         类型的公共类型(类模板特化) | 
辅助别名模板
| 
           
            
             template
            
            
             <
            
            
             
              std::
              
               input_iterator
              
             
            
            I
            
             >
            
             using const_iterator = /* 见说明 */ ; | (C++23 起) | |
       如果
       
        I
       
       满足
       
        
         
          constant-iterator
         
        
       
       (一个仅用于说明的概念),则
       
        
         const_iterator
         
          <
         
         I
         
          >
         
        
       
       表示类型
       
        I
       
       。否则,
       
        
         basic_const_iterator
         
          <
         
         I
         
          >
         
        
       
       。
      
| 
           
            
             template
            
            
             <
            
            
             
              std::
              
               semiregular
              
             
            
            S
            
             >
            
             using const_sentinel = /* 详见说明 */ ; | (C++23 起) | |
       如果
       
        S
       
       满足
       
        
         input_iterator
        
       
       模型,则
       
        
         const_sentinel
         
          <
         
         S
         
          >
         
        
       
       表示类型
       
        
         const_iterator
         
          <
         
         S
         
          >
         
        
       
       。否则为
       
        S
       
       。
      
辅助函数模板
| 
           
            
             template
            
            
             <
            
            
             
              std::
              
               input_iterator
              
             
            
            T
            
             >
            
             constexpr const_iterator < T > make_const_iterator ( I it ) { return it ; } | (自 C++23 起) | |
| 
           
            
             template
            
            
             <
            
            
             
              std::
              
               semiregular
              
             
            
            S
            
             >
            
             constexpr const_sentinel < S > make_const_sentinel ( S s ) { return s ; } | (自 C++23 起) | |
注释
| 功能测试 宏 | 值 | 标准 | 功能特性 | 
|---|---|---|---|
| 
           __cpp_lib_ranges_as_const
           | 
           202207L
           | (C++23) | 
          std::basic_const_iterator
          | 
| 
           202311L
           | (C++23) (DR) | 
          std::basic_const_iterator
         应遵循其底层类型的可转换性 | 
示例
#include <cassert> #include <iterator> #include <vector> int main() { std::vector v{1, 2, 3}; std::vector<int>::iterator i = v.begin(); *i = 4; // 正确,现在 v[0] == 4 i[1] = 4; // 正确,等同于 *(i + 1) = 4 auto ci = std::make_const_iterator(i); assert(*ci == 4); // 正确,可以读取底层对象 assert(ci[0] == 4); // 正确,同上 // *ci = 13; // 错误:该位置为只读 // ci[0] = 13; // 错误:同上 ci.base()[0] = 42; // 正确:底层迭代器可写 assert(*ci == 42); // 正确:底层位置 v[0] 已被修改 }
缺陷报告
以下行为变更缺陷报告被追溯应用于先前发布的C++标准。
| 缺陷报告 | 应用于 | 发布时行为 | 正确行为 | 
|---|---|---|---|
| P2836R1 | C++23 | 
          basic_const_iterator
         未遵循其底层类型的可转换性 | 提供转换运算符 |