std:: unreachable_sentinel_t, std:: unreachable_sentinel
| Iterator concepts | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Iterator primitives | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Algorithm concepts and utilities | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Indirect callable concepts | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Common algorithm requirements | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Utilities | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Iterator adaptors | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
헤더 파일에 정의됨
<iterator>
|
||
|
struct
unreachable_sentinel_t
;
|
(1) | (C++20부터) |
|
inline
constexpr
unreachable_sentinel_t unreachable_sentinel
{
}
;
|
(2) | (C++20부터) |
unreachable_sentinel_t
는 무한 구간의 "상한"을 나타내는 데 사용할 수 있는 빈 클래스 타입입니다.
unreachable_sentinel
는
unreachable_sentinel_t
타입의 상수입니다.
목차 |
비멤버 함수
|
operator==
(C++20)
|
unreachable_sentinel_t
를 모든
weakly_incrementable
타입의 값과 비교합니다
(함수 템플릿) |
operator== (std::unreachable_sentinel_t)
|
template
<
std::
weakly_incrementable
I
>
friend
constexpr
bool
operator
==
(
unreachable_sentinel_t,
const
I
&
)
noexcept
|
(C++20 이후) | |
unreachable_sentinel_t
는 모든
weakly_incrementable
타입과 비교될 수 있으며 결과는 항상
false
입니다.
이 함수 템플릿은 일반적인
비한정 조회
또는
한정 조회
로는 보이지 않으며,
std::unreachable_sentinel_t
가 인자들의 연관 클래스일 때만
인자 종속 조회
를 통해 찾을 수 있습니다.
예제
#include <concepts> #include <cstddef> #include <iterator> #include <ranges> #include <utility> namespace ranges = std::ranges; // "iter != r.end()"를 절대 검사하지 않음 template<ranges::random_access_range R> constexpr std::size_t trivial_strlen(R&& r) { auto iter = r.begin(); while (*iter != ranges::range_value_t<R>{}) ++iter; return iter - r.begin(); } template<ranges::random_access_range R> constexpr std::size_t my_strlen(R&& r) { if constexpr (std::same_as<ranges::sentinel_t<R>, std::unreachable_sentinel_t>) return trivial_strlen(std::forward<R>(r)); else return ranges::find(std::forward<R>(r), ranges::range_value_t<R>{}) - ranges::begin(r); } int main() { constexpr static char str[] = "The quick brown fox jumps over a lazy dog."; static_assert(my_strlen(str) == 42); // 문자열 길이를 더 빠르게 찾지만, "str"이 null로 종료되지 않은 경우 UB constexpr auto unsafe_str = ranges::subrange{str, std::unreachable_sentinel}; static_assert(my_strlen(unsafe_str) == 42); }
참고 항목
|
(C++20)
|
초기값을 반복적으로 증가시켜 생성된 시퀀스로 구성된
view
(클래스 템플릿) (커스터마이제이션 포인트 객체) |