C++では、プログラムで扱うデータの種類を指定するために「データ型(data types)」を使用します。
データ型は、値の種類・メモリの使い方・演算方法などを決定する非常に重要な要素です。
C++の型は大きく次の4つのカテゴリーに分類できます。
- 基本型(Fundamental types)
- 派生型(Derived types)
- ユーザー定義型(User-defined types)
- 型エイリアス(Type aliases)
以下では、それぞれの種類について詳しく説明します。
基本型(Fundamental Types)
基本型は、C++言語に最初から組み込まれている型です。
整数・小数・文字・真偽値など、最も基本的なデータを扱うために使用されます。
整数型(Integer Types)
整数型は、小数点を持たない数値を扱う型です。
C++では複数の整数型が用意されており、それぞれ扱える数値の範囲が異なります。
主な整数型は次の通りです。
- short
- int
- long
- long long
これらの型は、処理系によってサイズが異なる場合がありますが、C++標準では最小ビット数が定められています。
また、整数型には「符号付き」と「符号なし」の2種類があります。
符号付き整数は負の数を扱うことができ、符号なし整数は0以上の値のみを扱います。
符号なし整数は次のような型で表されます。
- unsigned short
- unsigned int
- unsigned long
- unsigned long long
浮動小数点型(Floating-Point Types)
浮動小数点型は、小数を扱うための型です。
主な型は次の3種類です。
- float
- double
- long double
このうち、double は最も一般的に使用される小数型であり、floatよりも高い精度を持っています。
long double はさらに高い精度を扱うことができますが、使用できる精度は環境によって異なる場合があります。
文字型(Character Types)
文字型は、1文字のデータや文字コードを扱うための型です。
主な文字型は次の通りです。
- char
- signed char
- unsigned char
char は一般的に文字を表すために使用されますが、実際には小さな整数として扱われることもあります。
なお、char が符号付きか符号なしかは処理系によって異なります。
Unicode文字型
C++では、Unicode文字を扱うための文字型も用意されています。
主なUnicode文字型は次の通りです。
- char8_t
- char16_t
- char32_t
- wchar_t
char8_t は UTF-8 のコード単位を扱う型で、C++20で追加されました。
char16_t は UTF-16、char32_t は UTF-32 のコード単位を扱います。
wchar_t はワイド文字を扱う型ですが、サイズや用途は環境によって異なる場合があります。
真偽型(Boolean Type)
真偽型は、論理値を扱うための型です。
この型が扱える値は次の2つだけです。
- true
- false
条件分岐や論理演算などで頻繁に使用されます。
void型
void は「値を持たない型」です。
主に次の用途で使用されます。
- 関数が値を返さないことを示す
- 汎用ポインタの型として使用する
void 型の変数を作ることはできません。
ヌルポインタ型
C++には、ヌルポインタ専用の型として「std::nullptr_t」が存在します。
これはポインタがどこも指していない状態を表すための型です。
ヌルポインタはポインタを初期化する際などに使用されます。
派生型(Derived Types)
派生型は、基本型を組み合わせて作られる型です。
配列(Array)
配列は、同じ型のデータを複数まとめて管理するための型です。
配列では、要素が連続したメモリ領域に格納されます。
ポインタ(Pointer)
ポインタは、メモリ上のアドレスを扱うための型です。
ポインタを使用すると、変数の格納場所を直接参照することができます。
参照(Reference)
参照は、既存の変数の別名を作る仕組みです。
C++では次の2種類の参照があります。
- 左辺値参照
- 右辺値参照
右辺値参照は、ムーブセマンティクスなどの高度なメモリ管理で重要な役割を持っています。
関数型(Function Types)
関数も型を持つ存在です。
関数型は、戻り値の型と引数の型の組み合わせによって決まります。
ユーザー定義型(User-defined Types)
ユーザー定義型は、プログラマーが独自に作成できる型です。
struct
struct は、複数のデータをまとめて扱うための構造体です。
関連するデータを1つのまとまりとして管理することができます。
class
class は、オブジェクト指向プログラミングの基本となる型です。
データと処理をまとめて管理することができます。
struct と class の違いは主にデフォルトのアクセス指定です。
union
union は、複数のメンバーが同じメモリ領域を共有する型です。
そのため、同時に保持できる値は1つだけになります。
列挙型(enum)
列挙型は、関連する定数の集合を定義するための型です。
C++では次の2種類があります。
- 従来の列挙型
- 型安全な列挙型(enum class)
enum class はスコープが明確であり、型安全性が高いため、現代のC++ではよく使用されます。
型エイリアス(Type Alias)
型エイリアスは、既存の型に別名を付ける仕組みです。
新しい型を作るわけではなく、既存の型をより分かりやすくする目的で使用されます。
型エイリアスを作る方法には、次の2種類があります。
- typedef
- using
using は C++11 で導入された方法で、現在はこちらが推奨されることが多くなっています。
まとめ
C++のデータ型は、次の4つのカテゴリーに整理できます。
基本型
- 整数型
- 浮動小数点型
- 文字型
- Unicode文字型
- 真偽型
- void
- nullptr型
派生型
- 配列
- ポインタ
- 参照
- 関数型
ユーザー定義型
- struct
- class
- union
- enum
型エイリアス
- typedef
- using
これらの型を組み合わせることで、C++では非常に柔軟なデータ構造を設計することができます。
以上、C++のデータ型の一覧についてでした。
最後までお読みいただき、ありがとうございました。
