命名空间
变体
操作

no-throw-input-iterator, no-throw-forward-iterator, no-throw-sentinel-for, no-throw-input-range, no-throw-forward-range

来自 cppreference.cn
< cpp‎ | 内存
 
 
内存管理库
(仅作说明*)
未初始化内存算法
(C++17)
(C++17)
(C++17)
受约束的未初始化
内存算法
C 库

分配器
内存资源
垃圾回收支持
(C++11)(直到 C++23)
(C++11)(直到 C++23)
(C++11)(直到 C++23)
(C++11)(直到 C++23)
(C++11)(直到 C++23)
(C++11)(直到 C++23)
未初始化存储
(直到 C++20*)
(直到 C++20*)
显式生命周期管理
 
template< class I >

concept no-throw-input-iterator =
    std::input_iterator<I> &&
    std::is_lvalue_reference_v<std::iter_reference_t<I>> &&

    std::same_as<std::remove_cvref_t<std::iter_reference_t<I>>, std::iter_value_t<I>>;
(1) (仅作说明*)
template< class I >

concept no-throw-forward-iterator =
    no-throw-input-iterator<I> &&
    std::forward_iterator<I> &&

    no-throw-sentinel-for<I, I>;
(2) (仅作说明*)
template< class S, class I >
concept no-throw-sentinel-for = std::sentinel_for<S, I>;
(3) (仅作说明*)
template< class R >

concept no-throw-input-range =
    ranges::range<R> &&
    no-throw-input-iterator<ranges::iterator_t<R>> &&

    no-throw-sentinel-for<ranges::sentinel_t<R>, ranges::iterator_t<R>>;
(4) (仅作说明*)
template< class R >

concept no-throw-forward-range =
    no-throw-input-range<R> &&

    no-throw-forward-iterator<ranges::iterator_t<R>>;
(5) (仅作说明*)

这些仅用于解释的概念指定了迭代器、哨兵和范围上的算法所需的操作不会抛出异常。

1) no-throw-input-iterator 概念要求解引用迭代器产生一个左值,类似于 contiguous_iteratorLegacyForwardIterator

[编辑] 语义要求

与所有标准概念一样,此处列出的每个概念仅在其所有子概念都被建模时才被建模。

1) 类型 I 仅当通过有效迭代器进行递增、复制构造、移动构造、复制赋值、移动赋值或解引用操作不抛出异常时,才建模 no-throw-input-iterator
3) 类型 SI 仅当通过类型 IS 的有效值之间的复制构造、移动构造、复制赋值、移动赋值或比较不抛出异常时,才建模 no-throw-sentinel-for
4) 类型 R 仅当对类型 R 的对象调用 ranges::beginranges::end 不抛出异常时,才建模 no-throw-input-range

[编辑] 注意

这些概念允许对迭代器和哨兵进行某些操作抛出异常,例如对无效值的操作。

[编辑] 参阅

指定类型是一个输入迭代器,即其引用的值可读,并且可以进行前置和后置增量
(概念) [编辑]
指定input_iterator是前向迭代器,支持相等比较和多趟遍历
(概念) [编辑]
指定类型是input_or_output_iterator类型的哨兵
(概念) [编辑]
指定其迭代器类型满足 input_iterator 的范围
(概念) [编辑]
指定其迭代器类型满足 forward_iterator 的范围
(概念) [编辑]