Namespaces
Variants

std:: sentinel_for

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)
헤더 파일에 정의됨 <iterator>
template < class S, class I >

concept sentinel_for =
std:: semiregular < S > &&
std:: input_or_output_iterator < I > &&

__WeaklyEqualityComparableWith < S, I > ;
(C++20부터)

sentinel_for 개념은 input_or_output_iterator 타입과 범위를 나타내는 값을 가지는 semiregular 타입 간의 관계를 지정합니다. 설명 전용 개념 __WeaklyEqualityComparableWith equality_comparable 에서 설명됩니다.

의미론적 요구사항

s i 가 각각 S I 타입의 값이며, [ i , s ) range 를 나타낼 때, sentinel_for<S, I> 는 다음 조건에서만 모델됩니다:

  • i == s 는 잘 정의되어 있습니다.
  • 만약 bool ( i ! = s ) 이면, i 는 역참조 가능하며 [ ++ i , s ) 는 범위를 나타냅니다.
  • std:: assignable_from < I & , S > 는 모델링되거나 만족되지 않습니다.

== 연산자의 정의역은 시간이 지남에 따라 변할 수 있습니다. 반복자 i 와 센티넬 s 가 주어졌을 때, [ i , s ) 가 범위를 나타내고 i ! = s 인 경우, i 와 동일한 반복자를 증가시킨 후에는 [ i , s ) 가 계속 범위를 나타낼 필요가 없습니다 (따라서 이러한 증가 후에는 i == s 가 잘 정의될 필요도 없습니다).

참고 사항

센티넬 타입과 그에 대응하는 반복자 타입은 equality_comparable_with 를 모델링할 필요가 없습니다. 왜냐하면 센티넬 타입은 자기 자신과 비교 가능하지 않을 수 있으며, 이들은 공통 참조 타입을 가질 필요가 없기 때문입니다.

C++17부터 범위 기반 for 루프 에서 반복자 타입과 다른 센티넬 타입 사용이 허용되었습니다.

결함 보고서

다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 올바른 동작
LWG 3453 C++20 sentinel_for 의 의미론적 요구사항이 ranges::advance 에 대해 너무 느슨했음 강화됨