Namespaces
Variants

std::common_iterator<I,S>:: operator*,->

From cppreference.net
Iterator library
Iterator concepts
Iterator primitives
Algorithm concepts and utilities
Indirect callable concepts
Common algorithm requirements
(C++20)
(C++20)
(C++20)
Utilities
(C++20)
Iterator adaptors
Range access
(C++11) (C++14)
(C++14) (C++14)
(C++11) (C++14)
(C++14) (C++14)
(C++17) (C++20)
(C++17)
(C++17)
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_ ;
constexpr proxy ( std:: iter_reference_t < I > && x )
: keep_ ( std :: move ( x ) ) { }
public :
constexpr const std:: iter_value_t < I > * operator - > ( ) const noexcept {
return std:: addressof ( keep_ ) ;
}

} ;
(4) ( 설명 전용* )

현재 요소에 대한 포인터나 참조를 반환하거나, 이를 보유한 프록시를 반환합니다.

기본 std::variant 멤버 객체 var 가 타입 I 의 객체를 보유하지 않는 경우, 즉 std:: holds_alternative < I > ( var ) false 인 경우 동작은 정의되지 않습니다.

it I 타입의 반복자이며 var 에 의해 유지된다고 가정합니다. 즉, std :: get < I > ( var ) 입니다.

1,2) it 을 역참조한 결과를 반환합니다.
3) 현재 요소에 대한 포인터나 기반 반복자를 반환하거나, 이를 보유하는 프록시를 반환합니다:
  • 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 >>

)
.

목차

매개변수

(없음)

반환값

1,2) 현재 요소에 대한 참조 또는 prvalue 임시 객체. 다음 표현식과 동등함: * it .
3) 위에서 설명한 바와 같이 현재 요소 또는 이를 보유한 프록시에 대한 포인터나 반복자.

예제

#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)