<cstdint>
ヘッダでは、ビット数が規定された整数型の別名、およびマクロを提供する。これらの機能は、std
名前空間に属することを除いてC言語の標準ライブラリ<stdint.h>
ヘッダと同じである。
本ヘッダはフリースタンディング環境でも提供される。
符号付き整数型
型 | 説明 | 対応バージョン |
---|---|---|
int8_t |
8ビット幅の符号付き整数(実装するかどうかは処理系定義) | C++11 |
int16_t |
16ビット幅の符号付き整数(実装するかどうかは処理系定義) | C++11 |
int32_t |
32ビット幅の符号付き整数(実装するかどうかは処理系定義) | C++11 |
int64_t |
64ビット幅の符号付き整数(実装するかどうかは処理系定義) | C++11 |
int_fast8_t |
少なくても8ビット幅を持ち、演算が高速な符号付き整数 | C++11 |
int_fast16_t |
少なくても16ビット幅を持ち、演算が高速な符号付き整数 | C++11 |
int_fast32_t |
少なくても32ビット幅を持ち、演算が高速な符号付き整数 | C++11 |
int_fast64_t |
少なくても64ビット幅を持ち、演算が高速な符号付き整数 | C++11 |
int_least8_t |
少なくても8ビット幅を持つ、最小の符号付き整数 | C++11 |
int_least16_t |
少なくても16ビット幅を持つ、最小の符号付き整数 | C++11 |
int_least32_t |
少なくても32ビット幅を持つ、最小の符号付き整数 | C++11 |
int_least64_t |
少なくても64ビット幅を持つ、最小の符号付き整数 | C++11 |
intmax_t |
最も大きい符号付き整数型 | C++11 |
intptr_t |
ポインタサイズの符号付き整数型(実装するかどうかは処理系定義) | C++11 |
符号なし整数型
型 | 説明 | 対応バージョン |
---|---|---|
uint8_t |
8ビット幅の符号なし整数(実装するかどうかは処理系定義) | C++11 |
uint16_t |
16ビット幅の符号なし整数(実装するかどうかは処理系定義) | C++11 |
uint32_t |
32ビット幅の符号なし整数(実装するかどうかは処理系定義) | C++11 |
uint64_t |
64ビット幅の符号なし整数(実装するかどうかは処理系定義) | C++11 |
uint_fast8_t |
少なくても8ビット幅を持ち、演算が高速な符号なし整数 | C++11 |
uint_fast16_t |
少なくても16ビット幅を持ち、演算が高速な符号なし整数 | C++11 |
uint_fast32_t |
少なくても32ビット幅を持ち、演算が高速な符号なし整数 | C++11 |
uint_fast64_t |
少なくても64ビット幅を持ち、演算が高速な符号なし整数 | C++11 |
uint_least8_t |
少なくても8ビット幅を持つ、最小の符号なし整数 | C++11 |
uint_least16_t |
少なくても16ビット幅を持つ、最小の符号なし整数 | C++11 |
uint_least32_t |
少なくても32ビット幅を持つ、最小の符号なし整数 | C++11 |
uint_least64_t |
少なくても64ビット幅を持つ、最小の符号なし整数 | C++11 |
uintmax_t |
最も大きい符号なし整数型 | C++11 |
uintptr_t |
ポインタサイズの符号なし整数型(実装するかどうかは処理系定義) | C++11 |
以下のマクロは、整数型の限界値を表す。
符号付き整数型用の限界値マクロ
マクロ | 説明 | 対応バージョン |
---|---|---|
INT8_MIN |
int8_t の最小値(実装するかどうかは処理系定義) |
C++11 |
INT8_MAX |
int8_t の最大値(実装するかどうかは処理系定義) |
C++11 |
INT16_MIN |
int16_t の最小値(実装するかどうかは処理系定義) |
C++11 |
INT16_MAX |
int16_t の最大値(実装するかどうかは処理系定義) |
C++11 |
INT32_MIN |
int32_t の最小値(実装するかどうかは処理系定義) |
C++11 |
INT32_MAX |
int32_t の最大値(実装するかどうかは処理系定義) |
C++11 |
INT64_MIN |
int64_t の最小値(実装するかどうかは処理系定義) |
C++11 |
INT64_MAX |
int64_t の最大値(実装するかどうかは処理系定義) |
C++11 |
INT_FAST8_MIN |
int_fast8_t の最小値 |
C++11 |
INT_FAST8_MAX |
int_fast8_t の最大値 |
C++11 |
INT_FAST16_MIN |
int_fast16_t の最小値 |
C++11 |
INT_FAST16_MAX |
int_fast16_t の最大値 |
C++11 |
INT_FAST32_MIN |
int_fast32_t の最小値 |
C++11 |
INT_FAST32_MAX |
int_fast32_t の最大値 |
C++11 |
INT_FAST64_MIN |
int_fast64_t の最小値 |
C++11 |
INT_FAST64_MAX |
int_fast64_t の最大値 |
C++11 |
INT_LEAST8_MIN |
int_least8_t の最小値 |
C++11 |
INT_LEAST8_MAX |
int_least8_t の最大値 |
C++11 |
INT_LEAST16_MIN |
int_least16_t の最小値 |
C++11 |
INT_LEAST16_MAX |
int_least16_t の最大値 |
C++11 |
INT_LEAST32_MIN |
int_least32_t の最小値 |
C++11 |
INT_LEAST32_MAX |
int_least32_t の最大値 |
C++11 |
INT_LEAST64_MIN |
int_least64_t の最小値 |
C++11 |
INT_LEAST64_MAX |
int_least64_t の最大値 |
C++11 |
INTMAX_MIN |
intmax_t の最小値 |
C++11 |
INTMAX_MAX |
intmax_t の最大値 |
C++11 |
INTPTR_MIN |
intptr_t の最小値(実装するかどうかは処理系定義) |
C++11 |
INTPTR_MAX |
intptr_t の最大値(実装するかどうかは処理系定義) |
C++11 |
PTRDIFF_MIN |
ptrdiff_t の最小値 |
C++11 |
PTRDIFF_MAX |
ptrdiff_t の最大値 |
C++11 |
SIG_ATOMIC_MIN |
sig_atomic_t の最小値 |
C++11 |
SIG_ATOMIC_MAX |
sig_atomic_t の最大値 |
C++11 |
WCHAR_MIN |
wchar_t の最小値 |
C++11 |
WCHAR_MAX |
wchar_t の最大値 |
C++11 |
WINT_MIN |
wint_t の最小値 |
C++11 |
WINT_MAX |
wint_t の最大値 |
C++11 |
符号なし整数型用の限界値マクロ
マクロ | 説明 | 対応バージョン |
---|---|---|
UINT8_MAX |
uint8_t の最大値(実装するかどうかは処理系定義) |
C++11 |
UINT16_MAX |
uint16_t の最大値(実装するかどうかは処理系定義) |
C++11 |
UINT32_MAX |
uint32_t の最大値(実装するかどうかは処理系定義) |
C++11 |
UINT64_MAX |
uint64_t の最大値(実装するかどうかは処理系定義) |
C++11 |
UINT_FAST8_MAX |
uint_fast8_t の最大値 |
C++11 |
UINT_FAST16_MAX |
uint_fast16_t の最大値 |
C++11 |
UINT_FAST32_MAX |
uint_fast32_t の最大値 |
C++11 |
UINT_FAST64_MAX |
uint_fast64_t の最大値 |
C++11 |
UINT_LEAST8_MAX |
uint_least8_t の最大値 |
C++11 |
UINT_LEAST16_MAX |
uint_least16_t の最大値 |
C++11 |
UINT_LEAST32_MAX |
uint_least32_t の最大値 |
C++11 |
UINT_LEAST64_MAX |
uint_least64_t の最大値 |
C++11 |
UINTMAX_MAX |
uintmax_t の最大値 |
C++11 |
UINTPTR_MAX |
uintptr_t の最大値(実装するかどうかは処理系定義) |
C++11 |
SIZE_MAX |
size_t の最大値 |
C++11 |
符号付き整数型用の定数値マクロ
以下のマクロは、各整数型の定数値を表す関数マクロである。
例:) int8_t x = INT8_C(1);
マクロ | 説明 | 対応バージョン |
---|---|---|
INT8_C(n) |
8ビット幅を持つ、符号付き整数型の定数値(実装するかどうかは処理系定義) | C++11 |
INT16_C(n) |
16ビット幅を持つ、符号付き整数型の定数値(実装するかどうかは処理系定義) | C++11 |
INT32_C(n) |
32ビット幅を持つ、符号付き整数型の定数値(実装するかどうかは処理系定義) | C++11 |
INT64_C(n) |
64ビット幅を持つ、符号付き整数型の定数値(実装するかどうかは処理系定義) | C++11 |
INTMAX_C(n) |
最も大きい符号付き整数型の定数値 | C++11 |
符号なし整数型用の定数値マクロ
マクロ | 説明 | 対応バージョン |
---|---|---|
UINT8_C(n) |
8ビット幅を持つ、符号なし整数型の定数値(実装するかどうかは処理系定義) | C++11 |
UINT16_C(n) |
16ビット幅を持つ、符号なし整数型の定数値(実装するかどうかは処理系定義) | C++11 |
UINT32_C(n) |
32ビット幅を持つ、符号なし整数型の定数値(実装するかどうかは処理系定義) | C++11 |
UINT64_C(n) |
64ビット幅を持つ、符号なし整数型の定数値(実装するかどうかは処理系定義) | C++11 |
UINTMAX_C(n) |
最も大きい符号なし整数型の定数値 | C++11 |
備考
__STDC_LIMIT_MACROS
, __STDC_CONSTANT_MACROS
マクロについて
C99 の 7.18.3 <stdint.h>
についての脚注で、同ヘッダを C++ でコンパイルする場合に限界値マクロ、定数値マクロを得るためにはこれらのマクロを事前に定義する必要があるものとされていた。
Footnote 219, 220: C++ implementations should define these macros only when
__STDC_LIMIT_MACROS
is defined before<stdint.h>
is included.Footnote 222: C++ implementations should define these macros only when
__STDC_CONSTANT_MACROS
is defined before<stdint.h>
is included.
しかしその後の C 規格改定でこの脚注は削除され、 C11 では触れられていない。 C++11 は( C++14 も) C99 を参照規格としているが、 18.4.1 [cstdint.syn] p2 に注釈として、これらのマクロは採用されていないことが明記されている。
The macros defined by
<cstdint>
are provided unconditionally. In particular, the symbols__STDC_LIMIT_MACROS
and__STDC_CONSTANT_MACROS
(mentioned in footnotes 219, 220, and 222 in the C standard) play no role in C++.
おそらく上記 C99 の脚注のため、 C++ 処理系によってはヘッダ <stdint.h>
および <cstdint>
での限界値マクロ、定数値マクロの提供にこれらマクロの定義が必要となっているかもしれない。(特に C++03 対応の処理系が拡張として C99 由来のこれらヘッダを提供していた場合など。)
- glibc に対するバグ報告(修正は 2013/05/21 )
Bug 15366 – Per C11 and C++11,
<stdint.h>
should not look at__STDC_LIMIT_MACROS
or__STDC_CONSTANT_MACROS
- What do __STDC_LIMIT_MACROS and __STDC_CONSTANT_MACROS mean? - Stack Overflow
バージョン
言語
- C++11