名稱空間
變體
操作

std::weakly_incrementable

來自 cppreference.com
 
 
迭代器庫
迭代器概念
weakly_incrementable
(C++20)
迭代器原語
演算法概念與工具
間接可呼叫概念
常用演算法要求
(C++20)
(C++20)
(C++20)
工具
(C++20)
迭代器介面卡
範圍訪問
(C++11)(C++14)
(C++14)(C++14)  
(C++11)(C++14)
(C++14)(C++14)  
(C++17)(C++20)
(C++17)
(C++17)
 
定義於標頭檔案 <iterator>
template< class I >

    concept weakly_incrementable =
        std::movable<I> &&
        requires(I i) {
            typename std::iter_difference_t<I>;
            requires /*is-signed-integer-like*/<std::iter_difference_t<I>>;
            { ++i } -> std::same_as<I&>; // 不要求保持等價性
            i++;                         // 不要求保持等價性

        };
(C++20 起)

關於 /*is-signed-integer-like*/ 的定義,請參見 is-integer-like

此概念規定了可透過前置和後置增量運算子遞增的型別的要求,但這些增量操作不一定保持等價性,並且型別本身不要求是 std::equality_comparable

對於 std::weakly_incrementable 型別,a == b 不表示 ++a == ++b。對弱可遞增型別操作的演算法必須是單趟演算法。這些演算法可以透過 std::istream_iterator 與輸入流一起用作輸入資料的源。

[編輯] 語義要求

對於型別 I 的物件 i,僅當滿足以下所有條件時,I 才建模 std::weakly_incrementable

  • 表示式 ++ii++ 具有相同的定義域。
  • 如果 i 可遞增,則 ++ii++ 都會使 i 前進。
  • 如果 i 可遞增,則 std::addressof(++i) == std::addressof(i)

[編輯] 缺陷報告

下列更改行為的缺陷報告追溯地應用於以前出版的 C++ 標準。

缺陷報告 應用於 釋出時的行為 正確的行為
P2325R3 C++20 default_initializable 是必需的 未要求

[編輯] 參見

指定 weakly_incrementable 型別的增量操作是保持等價性的,並且該型別是equality_comparable
(概念) [編輯]