std::common_iterator<I,S>:: operator++
|
constexpr
common_iterator
&
operator
++
(
)
;
|
(1) | (C++20부터) |
|
constexpr
decltype
(
auto
)
operator
++
(
int
)
;
|
(2) | (C++20부터) |
|
헬퍼 타입
|
||
|
class
/*postfix_proxy*/
{
std::
iter_value_t
<
I
>
keep_
;
|
(3) | ( 설명 전용* ) |
기본 반복자를 증가시킵니다.
기본
std::variant
멤버 객체
var
가 타입
I
의 객체를 보유하지 않는 경우, 즉
std::
holds_alternative
<
I
>
(
var
)
가
false
인 경우 동작은 정의되지 않습니다.
it
이
I
타입의 반복자이며
var
에 의해 유지된다고 가정합니다. 즉,
std
::
get
<
I
>
(
var
)
입니다.
-
다음과 동등함:
auto
tmp
=
*
this
;
++*
this
;
return
tmp
;
, 만약
I
가
forward_iterator를 모델링하는 경우. - 다음과 동등함: return it ++ ; , 만약 변수 정의 auto && ref = * it ++ ; 가 올바른 형식을 가지거나, 다음 중 하나가
-
- std:: indirectly_readable < I > 또는
- std:: constructible_from < std:: iter_value_t < I > , std:: iter_reference_t < I >> 또는
- std:: move_constructible < std:: iter_value_t < I >>
- 가 false 인 경우.
-
다음과 동등함:
postfix_proxy p
(
**
this
)
;
++*
this
;
return
p
;
그 외의 경우, 여기서
postfix_proxy는 설명 전용 헬퍼 타입 (3) 임.
목차 |
매개변수
(없음)
반환값
예제
#include <algorithm> #include <initializer_list> #include <iostream> #include <iterator> int main() { const auto il = {1, 2, 3, 4, 5, 6}; using CI = std::common_iterator< std::counted_iterator<std::initializer_list<int>::iterator>, std::default_sentinel_t >; CI first{std::counted_iterator{std::begin(il), std::ssize(il) - 2}}; for (; first != std::default_sentinel; ++first) std::cout << *first << ' '; std::cout << '\n'; }
출력:
1 2 3 4
결함 보고서
다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.
| DR | 적용 대상 | 게시된 동작 | 수정된 동작 |
|---|---|---|---|
| P2259R1 | C++20 | 후위 증가 연산자가 더 많은 상황에서 결과를 폐기할 수 있었음 | 결과를 유지하기 위해 프록시 클래스 사용 |
| LWG 3546 | C++20 | 프록시 객체 초기화가 경우에 따라 올바른 형식이 아니었음 | 상황 및 정의 조정 |
| LWG 3574 | C++20 |
variant
는 완전한 constexpr이었지만(P2231R1)
common_iterator
는 그렇지 않았음
|
또한 constexpr로 만듦 |
| LWG 3595 | C++20 | 프록시 타입 함수에 constexpr 및 noexcept가 누락됨 | 추가함 |
참고 항목
|
두 iterator adaptor 사이의 거리를 계산합니다
(function template) |