基本型
(型システムの概要については型も参照してください。 C++ ライブラリによって提供される型関連のユーティリティの一覧も参照してください。)
目次 |
[編集]void 型
- void — 値の空集合を持つ型。 完全化することのできない不完全型です (そのため
void
型のオブジェクトは使用できません)。void
の配列やvoid
への参照は存在しません。 しかしvoid
へのポインタやvoid
型を返す関数 (他の言語でいう手続き) は使用できます。
[編集]std::nullptr_t
ヘッダ <cstddef> で定義 | ||
typedef decltype(nullptr) nullptr_t; | (C++11以上) | |
std::nullptr_t はヌルポインタリテラル nullptr の型です。 これは、それ自身はポインタ型でもメンバポインタ型でもない、独立した型です。
[編集]ブーリアン型
[編集]整数型
- int — 基本整数型。 下に掲載しているいずれかの修飾子が使用される場合、キーワード
int
は省略されることがあります。 長さ修飾子が存在しない場合は、少なくとも16ビットの幅を持つことが保証されます。 しかし、32ビットまたは64ビットのシステムでは、少なくとも32ビットの幅を持つことがほぼ例外なく保証されます (下記参照)。
[編集]修飾子
整数型を修飾します。 任意の順序で混ぜることができます。 型名内にそれぞれのグループからひとつだけ存在できます。
符号の有無
- signed — 対象の型が符号付きの表現を持ちます (これは省略時のデフォルトです)。
- unsigned — 対象の型が符号なしの表現を持ちます。
サイズ
- short — 対象の型が空間に対して最適化され、少なくとも16ビットの幅を持ちます。
- long — 対象の型が少なくとも32ビットの幅を持ちます。
| (C++11以上) |
ノート: すべての型指定子と同様に、任意の順序で使用できます。 unsignedlonglongint と longintunsignedlong は同じ型を表します。
[編集]性質
以下の表はすべての利用可能な整数型と様々なデータモデルにおけるその性質の要約です。
型指定子 | 同等な型 | データモデルごとのビット幅 | ||||
---|---|---|---|---|---|---|
C++標準 | LP32 | ILP32 | LLP64 | LP64 | ||
short | shortint | 少なくとも 16 | 16 | 16 | 16 | 16 |
shortint | ||||||
signedshort | ||||||
signedshortint | ||||||
unsignedshort | unsignedshortint | |||||
unsignedshortint | ||||||
int | int | 少なくとも 16 | 16 | 32 | 32 | 32 |
signed | ||||||
signedint | ||||||
unsigned | unsignedint | |||||
unsignedint | ||||||
long | longint | 少なくとも 32 | 32 | 32 | 32 | 64 |
longint | ||||||
signedlong | ||||||
signedlongint | ||||||
unsignedlong | unsignedlongint | |||||
unsignedlongint | ||||||
longlong | longlongint (C++11) | 少なくとも 64 | 64 | 64 | 64 | 64 |
longlongint | ||||||
signedlonglong | ||||||
signedlonglongint | ||||||
unsignedlonglong | unsignedlonglongint (C++11) | |||||
unsignedlonglongint |
ノート: 整数算術は符号付き整数型と符号なし整数型に対して異なって定義されます。 算術演算子、特に整数のオーバーフローを参照してください。
std::size_t は sizeof 演算子、 sizeof... 演算子および alignof 演算子(C++11以上)の結果の符号なし整数型です。
固定幅の整数型も参照してください。(C++11以上)
[編集]データモデル
基本型のサイズについてそれぞれの処理系が行う選択は、「データモデル」と呼ばれます。 以下の4つのデータモデルが広く受け入れられています。
32ビットシステム:
- LP32 または 2/4/4 (int が16ビット、 long とポインタが32ビット)
- Win16 API
- ILP32 または 4/4/4 (int、long、ポインタが32ビット)
- Win32 API
- Unix および Unix ライクなシステム (Linux、 Mac OS X)
64ビットシステム:
- LLP64 または 4/4/8 (int と long が32ビット、ポインタが64ビット)
- Win64 API
- LP64 または 4/8/8 (int が32ビット、 long とポインタが64ビット)
- Unix および Unix ライクなシステム (Linux、 Mac OS X)
他のモデルは非常に稀です。 例えば、 ILP64 (8/8/8: int、long、ポインタが64ビット) は、いくつかの初期の64ビット Unix システム (クレイ上の Unicos など) でのみ見られました。
[編集]文字型
- signedchar — 符号付き文字表現のための型。
- unsignedchar — 符号なし文字表現のための型。 オブジェクト表現 (生のメモリ) を調べるためにも使用できます。
- char — ターゲットシステムで最も効率的に処理できる文字表現のための型 (signedchar または unsignedchar のいずれかと同じ表現および同じアライメントを持ちますが、別の型です)。 マルチバイト文字列はコードユニットを表現するためにこの型を使用します。 文字型は任意の UTF-8 の8ビットコードユニットを表現するのに十分大きな型です。(C++14以上)char の符号はコンパイラおよびターゲットプラットフォームに依存します。 ARM および PowerPC ではデフォルトは一般的に符号なしで、 x86 および x64 ではデフォルトは一般的に符号付きです。
- wchar_t — ワイド文字表現のための型 (ワイド文字列を参照してください)。 サポートされている任意の文字のコードポイントを表現するのに十分大きいことが要求されます (Unicode をサポートするシステムでは32ビットです。 顕著な例外は Windows で、 wchar_t は16ビットであり、 UTF-16 コードユニットを保持します)。 整数型のいずれかと同じサイズ、同じ符号有無、同じアライメントを持ちますが、別の型です。
| (C++11以上) |
| (C++20以上) |
最低限のビット数の他に、 C++ 標準は以下のことも保証します。
- 1== sizeof(char)<= sizeof(short)<= sizeof(int)<= sizeof(long)<= sizeof(longlong)
ノート: これは、バイトが64ビットのサイズであり、すべての型 (char を含む) が64ビット幅であり、 sizeof がすべての型に対して 1 を返すような、極端なケースも許容します。
[編集]浮動小数点型
- float — 単精度浮動小数点型。 通常、 IEEE-754 の32ビット浮動小数点型です。
- double — 倍精度浮動小数点型。 通常、 IEEE-754 の64ビット浮動小数点型です。
- longdouble — 拡張精度浮動小数点型。 IEEE-754 によって規定されている型に対応するとは限りません。 通常、 x86 および x86-64 アーキテクチャにおける80ビットの x87 浮動小数点型です。
[編集]性質
浮動小数点型は以下のような特別な値をサポートすることがあります。
- 無限大 (正および負)。 INFINITY を参照してください。
- 負のゼロ-0.0。 正のゼロと比較すると等しくなりますが、一部の算術演算 (例えば 1.0/0.0==INFINITY だけれども 1.0/-0.0==-INFINITY です) および一部の数学関数 (例えば sqrt(std::complex)) では意味があります。
- 非数 (NaN)。 いかなる値 (自分自身も含む) と比較しても等しくなりません。 NaN を表すビットパターンは複数あります (std::nan および NAN を参照してください)。 C++ は、 std::numeric_limits::has_signaling_NaN によってサポートの有無を検出する以外、 signaling NaN に対して特別な扱いを行っておらず、すべての NaN を quiet として扱います。
実数の浮動小数点数は、算術演算子 + - / * および <cmath> の様々な数学関数で使用することができます。 組み込みの演算子とライブラリ関数はどちらも、 math_errhandling に記述されている通りに、浮動小数点例外を発生したり、 errno を設定したりすることがあります。
浮動小数点式は、その型によって示されるよりも広い範囲や高い精度を持つことがあります (FLT_EVAL_METHOD を参照してください)。 また、浮動小数点式は縮約される、つまり、すべての中間値が無限の範囲と精度を持つかのように計算されることもあります (#pragma STDC FP_CONTRACT を参照してください)。
浮動小数点数に対する演算には、浮動小数点環境の状態によって影響を受けるものや、その状態を変更するものがあります (最も顕著なものは、丸めの方向です)。
実数の浮動小数点型と整数型の間で暗黙の変換が定義されます。
浮動小数点型のさらなる詳細、限界および性質については、浮動小数点型の限界および std::numeric_limits を参照してください。
[編集]値の範囲
以下の表は一般的な数値表現の限界についてのリファレンスを提供します。
C++20 未満では、 C++ 標準はどのような符号付き整数表現も認めており、 N ビットの符号付き整数の保証されている最低限の範囲は -(2N-1
-1) 〜 +2N-1
-1 (例えば符号付き8ビット型の場合は -127 〜 127) でした。 これは1の補数の限界に対応します。
しかし、すべての C++ コンパイラは2の補数表現を使用しており、 C++20 以上では、これが標準によって認められる唯一の表現であり、 -2N-1
〜 +2N-1
-1 (例えば符号付き8ビット型の場合は -128 〜 127) の範囲が保証されます。
型 | ビット数 | 形式 | 値の範囲 | |
---|---|---|---|---|
およその値 | 正確な値 | |||
文字 | 8 | 符号付き | -128 〜 127 | |
符号なし | 0 〜 255 | |||
16 | 符号なし | 0 〜 65535 | ||
32 | 符号なし | 0 〜 1114111 (0x10ffff) | ||
整数 | 16 | 符号付き | ± 3.27 × 104 | -32768 〜 32767 |
符号なし | 0 〜 6.55 × 104 | 0 〜 65535 | ||
32 | 符号付き | ± 2.14 × 109 | -2,147,483,648 〜 2,147,483,647 | |
符号なし | 0 〜 4.29 × 109 | 0 〜 4,294,967,295 | ||
64 | 符号付き | ± 9.22 × 1018 | -9,223,372,036,854,775,808 〜 9,223,372,036,854,775,807 | |
符号なし | 0 〜 1.84 × 1019 | 0 〜 18,446,744,073,709,551,615 | ||
浮動小数点数 | 32 | IEEE-754 |
|
|
64 | IEEE-754 |
|
|
ノート: これらの型によって表現可能な値に対する実際の (保証されている最低限ではない) 限界は、 <climits>, <cfloat> および std::numeric_limits で利用可能です。
[編集]キーワード
void, bool, true, false, char, wchar_t, char8_t, char16_t, char32_t, int, short, long, signed, unsigned, float, double
[編集]関連項目
算術型 の C言語リファレンス |