跳到主要内容

C++ 命名要求: LegacyIterator

LegacyIterator 要求描述了可用于识别和遍历容器元素的类型。

LegacyIterator 是其他迭代器类型使用的基本要求集:LegacyInputIteratorLegacyOutputIteratorLegacyForwardIteratorLegacyBidirectionalIteratorLegacyRandomAccessIterator。迭代器可以被认为是指针的抽象。

所有迭代器类别都只要求那些在给定类别中能在常数时间(摊还)内实现的功能。因此,迭代器的要求表和概念定义 (自 C++20 起)不指定复杂度。

要求

类型 It 满足 LegacyIterator,如果:

给定

  • r 是类型 It 的左值,以下表达式必须有效并具有其指定效果
表达式返回类型前置条件
*r未指定r可解引用
++rIt&r 是可递增的(表达式 ++r 的行为已定义)

概念 (自 C++20 起)

点击展开

对于 std::iterator_traits 的定义,定义了以下仅用于说明的概念。

template<class I>
concept __LegacyIterator =
requires(I i)
{
{ *i } -> __Referenceable;
{ ++i } -> std::same_as<I&>;
{ *i++ } -> __Referenceable;
} && std::copyable<I>;

其中,仅当 T& 是有效类型(特别是 T 不能为 void)时,仅为说明目的而存在的概念 __Referenceable<T> 才被满足。

缺陷报告

以下改变行为的缺陷报告已追溯应用于先前发布的 C++ 标准。

缺陷报告应用于发布时的行为正确行为
LWG 3420C++20仅为说明目的而存在的概念首先检查可复制性只有当 requires-expression 返回 true 时才检查可复制性

C++ 命名要求: LegacyIterator

LegacyIterator 要求描述了可用于识别和遍历容器元素的类型。

LegacyIterator 是其他迭代器类型使用的基本要求集:LegacyInputIteratorLegacyOutputIteratorLegacyForwardIteratorLegacyBidirectionalIteratorLegacyRandomAccessIterator。迭代器可以被认为是指针的抽象。

所有迭代器类别都只要求那些在给定类别中能在常数时间(摊还)内实现的功能。因此,迭代器的要求表和概念定义 (自 C++20 起)不指定复杂度。

要求

类型 It 满足 LegacyIterator,如果:

给定

  • r 是类型 It 的左值,以下表达式必须有效并具有其指定效果
表达式返回类型前置条件
*r未指定r可解引用
++rIt&r 是可递增的(表达式 ++r 的行为已定义)

概念 (自 C++20 起)

点击展开

对于 std::iterator_traits 的定义,定义了以下仅用于说明的概念。

template<class I>
concept __LegacyIterator =
requires(I i)
{
{ *i } -> __Referenceable;
{ ++i } -> std::same_as<I&>;
{ *i++ } -> __Referenceable;
} && std::copyable<I>;

其中,仅当 T& 是有效类型(特别是 T 不能为 void)时,仅为说明目的而存在的概念 __Referenceable<T> 才被满足。

缺陷报告

以下改变行为的缺陷报告已追溯应用于先前发布的 C++ 标准。

缺陷报告应用于发布时的行为正确行为
LWG 3420C++20仅为说明目的而存在的概念首先检查可复制性只有当 requires-expression 返回 true 时才检查可复制性