名前空間
変種
操作

基本型

提供: cppreference.com
< cpp‎ | language
 
 
C++言語
一般的なトピック
フロー制御
条件付き実行文
繰り返し文 (ループ)
ジャンプ文
関数
関数宣言
ラムダ関数宣言
inline 指定子
例外指定 (C++20未満)
noexcept 指定子 (C++11)
例外
名前空間
指定子
decltype (C++11)
auto (C++11)
alignas (C++11)
記憶域期間指定子
初期化
代替表現
リテラル
ブーリアン - 整数 - 浮動小数点
文字 - 文字列 - nullptr (C++11)
ユーザ定義 (C++11)
ユーティリティ
属性 (C++11)
typedef 宣言
型エイリアス宣言 (C++11)
キャスト
暗黙の変換 - 明示的な変換
static_cast - dynamic_cast
const_cast - reinterpret_cast
メモリ確保
クラス
クラス固有の関数特性
特別なメンバ関数
テンプレート
その他
 
 

(型システムの概要についてはも参照してください。 C++ ライブラリによって提供される型関連のユーティリティの一覧も参照してください。)

目次

[編集] void 型

void — 値の空集合を持つ型。 完全化することのできない不完全型です (そのため void 型のオブジェクトは使用できません)。 void配列void への参照は存在しません。 しかし void へのポインタvoid 型を返す関数 (他の言語でいう手続き) は使用できます。

[編集] std::nullptr_t

ヘッダ <cstddef> で定義
typedef decltype(nullptr) nullptr_t;
(C++11以上)

std::nullptr_t はヌルポインタリテラル nullptr の型です。 これは、それ自身はポインタ型でもメンバポインタ型でもない、独立した型です。

[編集] ブーリアン型

bool — 2つの値 true または false のいずれかを保持することができる型。 sizeof(bool) の値は処理系定義であり、 1 ではないかもしれません。

[編集] 整数型

int — 基本整数型。 下に掲載しているいずれかの修飾子が使用される場合、キーワード int は省略されることがあります。 長さ修飾子が存在しない場合は、少なくとも16ビットの幅を持つことが保証されます。 しかし、32ビットまたは64ビットのシステムでは、少なくとも32ビットの幅を持つことがほぼ例外なく保証されます (下記参照)。

[編集] 修飾子

整数型を修飾します。 任意の順序で混ぜることができます。 型名内にそれぞれのグループからひとつだけ存在できます。

符号の有無

signed — 対象の型が符号付きの表現を持ちます (これは省略時のデフォルトです)。
unsigned — 対象の型が符号なしの表現を持ちます。

サイズ

short — 対象の型が空間に対して最適化され、少なくとも16ビットの幅を持ちます。
long — 対象の型が少なくとも32ビットの幅を持ちます。
long long — 対象の型が少なくとも64ビットの幅を持ちます。
(C++11以上)

ノート: すべての型指定子と同様に、任意の順序で使用できます。 unsigned long long intlong int unsigned long は同じ型を表します。

[編集] 性質

以下の表はすべての利用可能な整数型とその性質の要約です。

型指定子 同等な型 データモデルごとのビット幅
C++標準 LP32 ILP32 LLP64 LP64
short
short int 少なくとも
16
16 16 16 16
short int
signed short
signed short int
unsigned short
unsigned short int
unsigned short int
int
int 少なくとも
16
16 32 32 32
signed
signed int
unsigned
unsigned int
unsigned int
long
long int 少なくとも
32
32 32 32 64
long int
signed long
signed long int
unsigned long
unsigned long int
unsigned long int
long long
long long int
(C++11)
少なくとも
64
64 64 64 64
long long int
signed long long
signed long long int
unsigned long long
unsigned long long int
(C++11)
unsigned long long int

ノート: 整数算術は符号付き整数型と符号なし整数型に対して異なって定義されます。 算術演算子、特に整数のオーバーフローを参照してください。

std::size_tsizeof 演算子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 など) でのみ見られました。

[編集] 文字型

signed char — 符号付き文字表現のための型。
unsigned char — 符号なし文字表現のための型。 オブジェクト表現 (生のメモリ) を調べるためにも使用できます。
char — ターゲットシステムで最も効率的に処理できる文字表現のための型 (signed char または unsigned char のいずれかと同じ表現および同じアライメントを持ちますが、別の型です)。 マルチバイト文字列はコード単位を表現するためにこの型を使用します。 文字型は任意の UTF-8 の8ビットコード単位を表現するのに十分大きな型です。 (C++14以上) char の符号はコンパイラおよびターゲットプラットフォームに依存します。 ARM および PowerPC ではデフォルトは一般的に符号なしで、 x86 および x64 ではデフォルトは一般的に符号付きです。
wchar_t — ワイド文字表現のための型 (ワイド文字列を参照してください)。 サポートされている任意の文字のコードポイントを表現するのに十分大きいことが要求されます (Unicode をサポートするシステムでは32ビットです。 顕著な例外は Windows で、 wchar_t は16ビットであり、 UTF-16 のコード単位を保持します)。 整数型のいずれかと同じサイズ、同じ符号有無、同じアライメントを持ちますが、別の型です。
char16_t — UTF-16 文字表現のための型。 任意の UTF-16 コード単位 (16ビット) を表現するのに十分大きいことが要求されます。 std::uint_least16_t と同じサイズ、同じ符号有無、同じアライメントを持ちますが、別の型です。
char32_t — UTF-32 文字表現のための型。 任意の UTF-32 コード単位 (32ビット) を表現するのに十分大きいことが要求されます。 std::uint_least32_t と同じサイズ、同じ符号有無、同じアライメントを持ちますが、別の型です。
(C++11以上)
char8_t — UTF-8 文字表現のための型。 任意の UTF-8 コード単位 (8ビット) を表現するのに十分大きいことが要求されます。 unsigned char と同じサイズ、同じ符号有無、同じアライメントを持ちます (そのため char および signed char と同じサイズ、同じアライメントを持ちます) が、別の型です。
(C++20以上)

最低限のビット数の他に、 C++ 標準は以下のことも保証します。

1 == sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long)

ノート: これは、バイトが64ビットのサイズであり、すべての型 (char を含む) が64ビット幅であり、 sizeof がすべての型に対して 1 を返すような、極端なケースも許容します。

[編集] 浮動小数点型

float — 単精度浮動小数点型。 通常、 IEEE-754 の32ビット浮動小数点型です。
double — 倍精度浮動小数点型。 通常、 IEEE-754 の64ビット浮動小数点型です。
long double — 拡張精度浮動小数点型。 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ビット型の場合は -127127) でした。 これは1の補数の限界に対応します。

しかし、すべての C++ コンパイラは2の補数表現を使用しており、 C++20 以上では、これが標準によって認められる唯一の表現であり、 -2N-1
+2N-1
-1
(例えば符号付き8ビット型の場合は -128127) の範囲が保証されます。

ビット数 形式 値の範囲
およその値 正確な値
文字 8 符号付き -128127
符号なし 0255
16 符号なし 065535
32 符号なし 01114111 (0x10ffff)
整数 16 符号付き ± 3.27 × 104 -3276832767
符号なし 06.55 × 104 065535
32 符号付き ± 2.14 × 109 -2,147,483,6482,147,483,647
符号なし 04.29 × 109 04,294,967,295
64 符号付き ± 9.22 × 1018 -9,223,372,036,854,775,8089,223,372,036,854,775,807
符号なし 01.84 × 1019 018,446,744,073,709,551,615
浮動小数点数 32 IEEE-754
  • 最小の非正規化数:
    ± 1.401,298,4 × 10-45
  • 最小の正規化数:
    ± 1.175,494,3 × 10-38
  • 最大:
    ± 3.402,823,4 × 1038
  • 最小の非正規化数:
    ±0x1p-149
  • 最小の正規化数:
    ±0x1p-126
  • 最大:
    ±0x1.fffffep+127
64 IEEE-754
  • 最小の非正規化数:
    ± 4.940,656,458,412 × 10-324
  • 最小の正規化数:
    ± 2.225,073,858,507,201,4 × 10-308
  • 最大:
    ± 1.797,693,134,862,315,7 × 10308
  • 最小の非正規化数:
    ±0x1p-1074
  • 最小の正規化数:
    ±0x1p-1022
  • 最大:
    ±0x1.fffffffffffffp+1023


ノート: これらの型によって表現可能な値に対する実際の (保証されている最低限ではない) 限界は、 <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

[編集] 関連項目