std::common_iterator<I,S>:: operator*,->
|
constexpr
decltype
(
auto
)
operator
*
(
)
;
|
(1) | (C++20부터) |
|
constexpr
decltype
(
auto
)
operator
*
(
)
const
requires /*dereferenceable*/ < const I > ; |
(2) | (C++20부터) |
|
constexpr
auto
operator
-
>
(
)
const
requires /* 설명 참조 */ ; |
(3) | (C++20부터) |
|
헬퍼 타입
|
||
|
class
/*proxy*/
{
std::
iter_value_t
<
I
>
keep_
;
|
(4) | ( 설명 전용* ) |
현재 요소에 대한 포인터나 참조를 반환하거나, 이를 보유한 프록시를 반환합니다.
기본
std::variant
멤버 객체
var
가 타입
I
의 객체를 보유하지 않는 경우, 즉
std::
holds_alternative
<
I
>
(
var
)
가
false
인 경우 동작은 정의되지 않습니다.
it
가
I
타입의 반복자이며
var
에 의해 유지된다고 가정합니다. 즉,
std
::
get
<
I
>
(
var
)
입니다.
it
을 역참조한 결과를 반환합니다.
-
I가 포인터 타입이거나 it. operator - > ( ) 표현식이 유효한 경우, return it ; 와 동등합니다. - 그렇지 않고 std:: iter_reference_t < I > 가 참조 타입인 경우, auto && tmp = * it ; return std:: addressof ( tmp ) ; 와 동등합니다.
-
그 외의 경우,
return
proxy
(
*
it
)
;
와 동등합니다. 여기서
proxy는 설명 전용 클래스 (4) 입니다.
requires
절 내의 표현식은 다음과 동등합니다:
std:: indirectly_readable < const I > && (
requires
(
const
I
&
i
)
{
i.
operator
-
>
(
)
;
}
||
std::
is_reference_v
<
std::
iter_reference_t
<
I
>>
||
std::
constructible_from
<
std::
iter_value_t
<
I
>
,
std::
iter_reference_t
<
I
>>
목차 |
매개변수
(없음)
반환값
예제
#include <complex> #include <initializer_list> #include <iostream> #include <iterator> using std::complex_literals::operator""i; int main() { const auto il = {1i, 3.14 + 2i, 3i, 4i, 5i}; using CI = std::common_iterator< std::counted_iterator<decltype(il)::iterator>, std::default_sentinel_t>; CI ci{std::counted_iterator{std::next(begin(il), 1), std::ssize(il) - 1}}; std::cout << *ci << ' ' << ci->real() << '\n'; }
출력:
(3.14,2) 3.14
결함 보고서
다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.
| DR | 적용 대상 | 게시된 동작 | 수정된 동작 |
|---|---|---|---|
| LWG 3574 | C++20 |
variant
는 완전한 constexpr이었으나(P2231R1)
common_iterator
는 그렇지 않았음
|
constexpr로 변경됨 |
| LWG 3595 | C++20 | 프록시 타입 함수들에 constexpr과 noexcept가 누락됨 | 추가됨 |
| LWG 3672 | C++20 |
operator->
가 일반적인 경우 참조로 반환할 수 있었음
|
항상 값으로 반환함 |
참고 항목
새로운
common_iterator
를 생성합니다
(public member function) |