Namespaces
Variants

std::experimental::ranges:: SizedSentinel

From cppreference.net
template < class S, class I >

concept bool SizedSentinel =
Sentinel < S, I > &&
! ranges :: disable_sized_sentinel < std:: remove_cv_t < S > , std:: remove_cv_t < I >> &&
requires ( const I & i, const S & s ) {
{ s - i } - > Same < ranges :: difference_type_t < I >> && ;
{ i - s } - > Same < ranges :: difference_type_t < I >> && ;

} ;
(1) (ranges TS)
template < class S, class I >
constexpr bool disable_sized_sentinel = false ;
(1) (ranges TS)

SizedSentinel 개념은 반복자 타입 I 의 객체와 센티넬 타입 S 의 객체가 상수 시간 내에 그들 사이의 거리를 계산하기 위해 서로 뺄셈될 수 있음을 명시합니다.

i 를 타입 I 의 반복자, s 를 타입 S 의 센티넬로 하고, [ i , s ) 가 범위를 나타낸다고 하자. ++i 를 적용하여 bool ( i == s ) 가 참이 되도록 하는 데 필요한 최소 적용 횟수를 N 이라 할 때, SizedSentinel<S, I> 는 다음 조건을 만족하는 경우에만 충족된다:

  • 만약 N ranges :: difference_type_t < I > 으로 표현 가능하면, s - i 는 잘 정의되며 N 과 같다; 그리고
  • 만약 -N ranges :: difference_type_t < I > 으로 표현 가능하면, i - s 는 잘 정의되며 -N 과 같다.

변수 템플릿 disable_sized_sentinel 는 뺄셈이 가능하지만 SizedSentinel 의 의미론적 요구사항을 충족하지 않는 반복자와 센티널이 해당 개념에서 제외되도록 선택할 수 있는 메커니즘을 제공합니다. 이를 위해 변수 템플릿을 특수화하여 값이 true 가 되도록 설정할 수 있습니다.

동등성 보존

표현식은 동일한 입력이 주어졌을 때 동일한 출력을 결과로 내놓는다면 등식 보존적(equality preserving) 입니다.

  • 표현식의 입력은 피연산자들로 구성됩니다.
  • 표현식의 출력은 결과값과 표현식에 의해 수정된 모든 피연산자들(있는 경우)로 구성됩니다.

동등성 보존이 요구되는 모든 표현식은 추가로 안정적(stable) 이어야 합니다: 동일한 입력 객체로 이러한 표현식을 두 번 평가할 때, 해당 입력 객체에 명시적인 수정이 개입되지 않는 한 동일한 출력을 가져야 합니다.

달리 명시되지 않는 한, requires-expression 에서 사용되는 모든 표현식은 등식 보존적이고 안정적이어야 하며, 표현식의 평가는 비상수 피연산자만 수정할 수 있습니다. 상수인 피연산자는 수정되어서는 안 됩니다.

암시적 표현 변형

어떤 상수 lvalue 피연산자에 대해 수정하지 않는 표현식을 사용하는 requires-expression 은 해당 피연산자에 대해 비상수 lvalue 또는 (가능하다면 상수) rvalue를 허용하는 해당 표현식의 추가 변형을 명시적으로 다른 의미론으로 요구하지 않는 한 암묵적으로 요구합니다. 이러한 암묵적 표현식 변형 은 선언된 표현식의 동일한 의미론적 요구사항을 충족해야 합니다. 구현이 이러한 변형들의 구문을 검증하는 범위는 명시되지 않습니다.