is-integer-like , is-signed-integer-like
|
template
<
class
T
>
constexpr bool /*is-integer-like*/ = /* see description */ ; |
(1) |
(C++20 이후)
( 설명 전용* ) |
|
template
<
class
T
>
constexpr bool /*is-signed-integer-like*/ = /* see description */ ; |
(2) |
(C++20 이후)
( 설명 전용* ) |
T
가 정수형 유사 타입일 때 참입니다.
T
가 signed-integer-like 타입일 때 참입니다.
목차 |
정수 클래스 타입
타입
T
가
integer-class type
이라 함은, 구현에서 정의하는 타입 집합에 속하며
integer types
와 동일하게 동작하는 타입을 의미합니다. 이는
아래
에 정의된 바와 같습니다. integer-class type이 반드시
class type
인 것은 아닙니다.
정수-클래스 타입은
2
N
개의 연속된 정수를 표현할 수 있으며, 여기서 양의 정수인
N
을 정수-클래스 타입의
너비(width)
라고 합니다.
정수-클래스 타입은 부호 있는(signed) 또는 부호 없는(unsigned) 타입입니다:
-
부호 있는 정수 클래스 타입
은
[-2 N-1
,2 N-1
-1]범위의 모든 정수를 표현할 수 있으며, 여기서 N 은 모든 부호 있는 정수형의 너비보다 큰 값입니다. -
부호 없는 정수 클래스 타입
은
[0,2 N
-1]범위의 모든 정수를 표현할 수 있으며, 여기서 N 은 모든 부호 없는 정수형의 너비보다 큰 값입니다.
모든 정수 클래스 타입은
regular
와
three_way_comparable
<
std::
strong_ordering
>
를 모델링합니다.
정수 클래스 타입의 값 초기화 된 객체는 값 0 을 가집니다.
정수-클래스 타입
T
의 표현식
E
는
bool
로
문맥적 변환
이 가능하며, 이는 마치
bool
(
E
!
=
T
(
0
)
)
와 같은 방식으로 수행됩니다.
정수형 유사 타입
(cv 한정자가 있을 수 있는)
bool
이외의 타입은
integral
개념을 모델링하거나 integer-class 타입인 경우
정수형 유사(integer-like)
라고 합니다.
-
정수형 유사 타입은
signed_integral을 모델로 하거나 부호 있는 정수 클래스 타입인 경우 부호 있는 정수형 유사(signed-integer-like) 입니다. -
정수형 유사 타입은
unsigned_integral을 모델로 하거나 부호 없는 정수 클래스 타입인 경우 부호 없는 정수형 유사(unsigned-integer-like) 입니다.
필수 동작
정수-클래스 타입의 표현식은 명시적으로 모든 정수-유사 타입으로 변환 가능하며, 동일한 부호성을 가지며 동등하거나 더 큰 너비를 가진 모든 정수-클래스 타입으로 암시적으로 변환 가능합니다. 정수 타입의 표현식은 암시적 및 명시적으로 모든 정수-클래스 타입으로 변환 가능합니다. 정수와 정수-클래스 타입 간의 변환 및 두 정수-클래스 타입 간의 변환은 예외를 통해 종료되지 않습니다. 이러한 변환의 결과는 소스 값을 모듈로
2
N
와 합동인 대상 타입의 고유한 값이며, 여기서
N
은 대상 타입의 너비입니다.
다음 타입을
Int<T>
로 표기합니다:
-
만약
T가 integer-class 타입이라면,Int<T>는T와 동일한 부호와 동일한 너비를 가진 고유한 가상의 확장 정수 타입 입니다. -
만약
T가 integral 타입이라면,Int<T>는T와 동일한 타입입니다.
주어진 타입, 값 및 연산자:
| 유형 | 정의 |
IC
|
정수 클래스 유형 |
IL
|
정수형 유사 유형 |
| 값 | 정의 |
| a |
IC
타입의 객체
|
| b |
IL
타입의 객체
|
| c | 정수형 타입의 lvalue |
| x |
a
와 동일한 값을 나타내는
Int<IC>
타입의 객체
|
| y |
b
와 동일한 값을 나타내는
Int<IL>
타입의 객체
|
| 연산자 | 정의 |
| @ = | 다음 중 하나: + = , - = , * = , / = , % = , & = , | = , ^ = , <<= 및 >>= |
| @ | 다음 중 하나: + , - , * , / , % , & , | , ^ , << , >> , && , || , == , ! = , < , > , <= , >= , <=> 및 , |
다음 표현식들은 지정된 조건이 충족될 경우 반드시 올바른 형식이어야 하며 지정된 결과와 효과를 가져야 합니다:
| 표현식 | 조건 | 결과 | 영향 |
|---|---|---|---|
| a ++ | 조건 없음 |
평가 전
a
의 값과 동일한 값을 가지는
IC
타입의 prvalue
|
a 의 값에 1 을 더하여 값을 수정함 |
| a -- | a의 값을 a 에서 1 을 빼서 수정합니다 | ||
| ++ a | 표현식-동등 to a + = 1 | ||
| -- a | 다음 표현식과 동등함: a - = 1 | ||
| & a | 표현식-동등한 std:: addressof ( a ) | ||
| ! a | ! x 는 올바른 형식임 | ! x 와 동일함 | |
| + a | + x 가 올바른 형식임 |
+
x
와 동일하지만, 타입이
IC
임
|
+ x 와 동일함 |
| - a | - x 가 올바른 형식임 |
-
x
와 동일하지만, 타입이
IC
임
|
- x 와 동일함 |
| ~a | ~x 가 올바른 형식임 |
~x
와 동일하지만
IC
타입을 가짐
|
~x 와 동일함 |
| c @ = a | c @ = x 가 올바른 형식임 | c 를 참조하는 lvalue | c @ = x 와 동일 |
| a @ = b | x @ = y 가 올바른 형식임 | a 를 참조하는 lvalue | x @ = y 와 동일하지만, x 에 저장될 값이 a 에 저장됨 |
| a @ b | x @ y 가 올바른 형식임 |
x @ y
와 동일하지만, 결과 타입이 다름:
|
x @ y 와 동일 |
| b @ a | y @ x 가 올바른 형식임 |
y @ x
와 동일하지만 결과 타입이 다름:
|
y @ x 와 동일 |
결함 보고서
다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.
| DR | 적용 대상 | 게시된 동작 | 수정된 동작 |
|---|---|---|---|
|
LWG 3366
( P2393R1 ) |
C++20 |
정수-클래스 타입과 해당 정수 타입 간 변환이
표현 가능한 값을 생성한다는 보장이 없었음 |
보장됨 |
|
LWG 3376
( P2393R1 ) |
C++20 | 정수-클래스 타입이 클래스 타입만 가능했음 |
비-클래스 타입도
허용됨 |
| LWG 3467 | C++20 | bool 가 정수-유사 타입으로 간주됨 | 제외됨 |
|
LWG 3575
( P2393R1 ) |
C++20 | 정수-클래스 타입이 삼방 비교 가능하다는 보장이 없었음 | 보장됨 |
참고 항목
|
(C++20)
|
semiregular
타입이 전위 및 후위 증가 연산자로 증가될 수 있음을 명시
(concept) |