is-integer-like , is-signed-integer-like
|
template
<
class
T
>
constexpr bool /*is-integer-like*/ = /* 见说明 */ ; |
(1) |
(C++20 起)
( 仅用于说明* ) |
|
template
<
class
T
>
constexpr bool /*is-signed-integer-like*/ = /* 见说明 */ ; |
(2) |
(C++20 起)
( 仅用于说明* ) |
T
是整数类类型。
T
是 signed-integer-like 类型。
目录 |
整数类类型
类型
T
若属于一组实现定义的类型集合,且这些类型的行为符合
整数类型
的定义(具体行为要求见
下文
),则称其为
整数类类型
。整数类类型不一定是
类类型
。
整数类类型可以表示
2
N
个连续整数,其中正整数
N
被称为该整数类类型的
宽度
。
整数类类型要么是有符号的,要么是无符号的:
-
一个
有符号整数类类型
可以表示区间
[-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
概念要求,或其为整数类类型,则称其为
类整型
。
-
若某整数类类型满足
signed_integral概念,或其为有符号整数类类型,则称其为 有符号整数类 类型。 -
若某整数类类型满足
unsigned_integral概念,或其为无符号整数类类型,则称其为 无符号整数类 类型。
必需行为
整数类类型的表达式可显式转换为任何整数类类型,且可隐式转换为等宽或更宽、相同符号性的整数类类型。整型表达式既可隐式也可显式转换为任何整数类类型。整型与整数类类型之间以及两种整数类类型之间的转换不会通过异常退出。此类转换的结果是目标类型中与源值模
2
N
同余的唯一值,其中
N
表示目标类型的位宽。
令
Int
表示以下类型:
-
若
T为整数类类型,则Int<T>是一个唯一的假设性 扩展整数类型 ,其符号性与宽度与T相同。 -
若
T为整数类型,则Int<T>与T为同一类型。
给定以下类型、值和运算符:
| 类型 | 定义 |
IC
|
整数类别类型 |
IL
|
整数类似类型 |
| 值 | 定义 |
| a |
IC
类型的对象
|
| b |
IL
类型的对象
|
| c | 整数类型的左值 |
| x |
Int<IC>
类型的对象,其值与
a
相同
|
| y |
Int<IL>
类型的对象,其值与
b
相同
|
| 运算符 | 定义 |
| @ = | 包括 + = , - = , * = , / = , % = , & = , | = , ^ = , <<= 和 >>= |
| @ | 包括 + , - , * , / , % , & , | , ^ , << , >> , && , || , == , ! = , < , > , <= , >= , <=> 和 , |
当满足指定条件时,以下表达式必须格式正确并产生指定结果及效果:
| 表达式 | 条件 | 结果 | 效果 |
|---|---|---|---|
| a ++ | 无条件 |
一个类型为
IC
的纯右值,其值等于求值前
a
的值
|
将 a 的值增加 1 |
| a -- | 将 a 的值减少 1 | ||
| ++ a | 表达式等价 于 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 的左值 | 与 c @ = x 相同 |
| a @ = b | x @ = y 是良构的 | 一个引用 a 的左值 | 与 x @ = y 相同,但原本会存入 x 的值被存入 a |
| a @ b | x @ y 是良构的 |
与
x @ y
相同,但结果类型不同:
|
与 x @ y 相同 |
| b @ a | y @ x 是良构的 |
与
y @ x
相同,但结果类型不同:
|
与 y @ x 相同 |
缺陷报告
以下行为变更缺陷报告被追溯应用于先前发布的C++标准。
| 缺陷报告 | 适用版本 | 发布时行为 | 修正后行为 |
|---|---|---|---|
|
LWG 3366
( P2393R1 ) |
C++20 |
整数类类型与其对应整数类型间的转换
未保证产生可表示值 |
确保转换有效 |
|
LWG 3376
( P2393R1 ) |
C++20 | 整数类类型仅允许为类类型 |
同时允许
非类类型 |
| LWG 3467 | C++20 | bool 被视为整数类类型 | 排除该类型 |
|
LWG 3575
( P2393R1 ) |
C++20 | 未保证整数类类型支持三路比较 | 确保支持比较 |
参见
|
(C++20)
|
指定
semiregular
类型可通过前置和后置递增运算符进行自增
(概念) |