std:: sized_sentinel_for, std:: disable_sized_sentinel_for
|
헤더에 정의됨
<iterator>
|
||
|
template
<
class
S,
class
I
>
concept sized_sentinel_for
=
|
(1) | (C++20부터) |
|
template
<
class
S,
class
I
>
inline constexpr bool disable_sized_sentinel_for = false ; |
(2) | (C++20부터) |
sized_sentinel_for
개념은 반복자 타입
I
의 객체와 센티넬 타입
S
의 객체가 상수 시간 내에 그들 사이의 거리를 계산하기 위해 서로 뺄셈될 수 있음을 명시합니다.
disable_sized_sentinel_for
변수 템플릿은 서로 뺄셈이 가능하지만 실제로
sized_sentinel_for
개념을 충족하지 않는 반복자와 센티넬이 해당 개념을 만족하는 것을 방지하는 데 사용할 수 있습니다.
S
와
I
에 대해
disable_sized_sentinel_for
를 특수화할 수 있으며, 이때 둘 중 적어도 하나는
프로그램 정의 타입
이어야 합니다. 이러한 특수화들은
상수 표현식
에서 사용 가능하며
const
bool
타입을 가집니다.
목차 |
의미론적 요구사항
i
를
I
타입의 반복자,
s
를
S
타입의 센티넬로 가정하고,
[
i
,
s
)
가 범위를 나타낸다고 하자.
n
을
++
i
를 적용하여
bool
(
i
==
s
)
가
true
가 되도록 하는 데 필요한 최소 적용 횟수라고 하자.
I
와
S
가
sized_sentinel_for<S, I>
를 모델링하려면 다음 모든 조건이 충족되어야 한다:
- 만약 n 이 std:: iter_difference_t < I > 로 표현 가능하면, s - i 는 잘 정의되며 n 과 같습니다.
- 만약 - n 이 std:: iter_difference_t < I > 로 표현 가능하면, i - s 는 잘 정의되며 - n 과 같습니다.
동등성 보존
표준 라이브러리 개념의 requires expressions 에 선언된 표현식들은 equality-preserving 해야 합니다(다르게 명시된 경우를 제외하고).
암시적 표현 변형
상수 lvalue 피연산자에 대해 비수정적인 표현식을 사용하는 requires expression 는 암시적 표현식 변형 도 요구합니다.
참고 항목
|
(C++20)
|
범위가 자신의 크기를 상수 시간에 알 수 있음을 지정함
(concept) |
|
(C++20)
|
범위의 크기와 같은 정수를 반환함
(customization point object) |