C++ 具名要求: LegacyIterator

来自cppreference.com
< cpp‎ | named req
 
 
 

LegacyIterator 概念描述可以用来标识和遍历一个容器元素的类型。

LegacyIterator 是用于其他迭代器类型的基概念: LegacyInputIteratorLegacyOutputIteratorLegacyForwardIteratorLegacyBidirectionalIteratorLegacyRandomAccessIterator 。可以把迭代器想象成指针的抽象。

目录

[编辑] 要求

若下列条件成立,则类型 It 满足 LegacyIterator

给定

  • 类型 It 的左值 r

下列表达式必须合法,且拥有其指定的效应:

表达式 返回类型 前提条件
*r 未指定 r 可解引用(见下)
++r It& r 可增(表达式 ++r 的行为有定义)

[编辑] 可解引用的迭代器

表达式 *i 的行为得到定义的迭代器被称作可解引用

下列情况下的迭代器不可解引用

  • 它们是尾后迭代器(包括数组后面一个位置的指针)或起始前迭代器。在特定实现中这些迭代器可能可解引用,但库决不假设它们能。
  • 它们是孤立迭代器, 即是说,没有关联到任何序列的迭代器。空指针,还有默认构造指针(保有不确定的值)是孤立的。
  • 它们被在引用它们之前的非法化迭代器操作非法化了。

概念

std::iterator_traits 的定义,定义以下仅为说明的概念。

template<class I>

concept __LegacyIterator =
  std::Copyable<I> && requires(I i) {
    {   *i } -> __Referenceable;
    {  ++i } -> std::Same<I&>;
    { *i++ } -> __Referenceable;

  };

其中仅为说明的概念 __Referenceable<T> 当且仅当 T& 是合法类型(特别是 T 必须不是 void )才得到满足。

(C++20 起)

[编辑] 参阅

指定该类型对象能自增并解引用
(概念) [编辑]