constexpr iterator& operator++(); // (1) C++20
constexpr void operator++(int); // (2) C++20
constexpr iterator operator++(int) requires forward_range<V>; // (3) C++20
iterator operator++(int) requires forward_range<V> = default; // (3) C++29
概要
イテレータを1つ進める。
効果
(1)は、
current_ = ranges::find_if(
std::move(++current_),
ranges::end(parent_->base_),
ref(*parent_->pred_));
return *this;
と等しい。
(2)は、++*this と等しい。
(3)は、
auto tmp = *this;
++*this;
return tmp;
と等しい。
備考
- (3) : C++29で、後置インクリメント・デクリメント演算のdefault定義を使用した
= default定義へ規定が変更された。動作は変わらない
例
#include <ranges>
#include <vector>
#include <iostream>
int main() {
using std::ranges::filter_view;
using std::ranges::iterator_t;
std::vector<int> vec = {0, 1, 2, 3, 4, 5};
filter_view fv{vec, [](int x){ return x % 2 == 0; }};
iterator_t<decltype(fv)> i(fv, vec.begin());
std::cout << *i << '\n';
i++;
std::cout << *i << '\n';
i++;
std::cout << *i << '\n';
}
出力
0
2
4
バージョン
言語
- C++20
処理系
- Clang: 13.0.0 ✅
- GCC: 10.1.0 ✅
- Visual C++: 2019 Update 10 ✅
参照
- N4861 24.7.4 Filter view
- N4950 26.7.8 Filter view
- P3785R1 Library Wording Changes for Defaulted Postfix Increment and Decrement Operations
- C++29で、後置演算子の規定が
= default定義へ書き換えられた
- C++29で、後置演算子の規定が