データ・オブジェクトの概要
データ・オブジェクト は、値または値のグループを含むストレージの領域です。 それぞれの値には、その ID を使用して、 またはそのオブジェクトを参照する、より複雑な式を使用してアクセスできます。 さらに、各オブジェクトには、固有のデータ型 が指定されています。 オブジェクトのデータ型によって、そのオブジェクトのストレージ割り振りと、以降のアクセスでの値の 解釈が決まります。このデータ型は、どの型検査でも使われます。 オブジェクトの ID とデータ型は、両方とも、オブジェクトの宣言 で確立されます。
クラス型のインスタンスは、一般にクラス・オブジェクト と呼ばれます。個別クラスのメンバーもまた、オブジェクトと呼ばれます。
データ型は、しばしば、次のように型カテゴリーにグループ化されますが、型カテゴリーは
重なり合います。
- 「基本型」対「派生型」
- 基本 データ型は、言語に対して「基本」または「組み込み 」とも呼ばれます。基本データ型としては、整数型、浮動小数点数型、および文字型があります。派生 型は、C++ の「複合」型とも呼ばれ、基本型のセットから作成され、配列、ポインター、構造体、共用体、列挙型などが含まれます。C++ のクラスはすべて複合型と見 なされます。
- 「組み込み型」対「ユーザー定義型」
- 組み込み データ型には、基本型のすべてと、基本型のア ドレスを参照する型 (配列、ポインターなど) があります。ユーザー定義 型は、ユーザー によって、typedef 定義、構造体定義、共用体定義、列挙型定義の中で基本型セットか ら作成されます。C++ のクラスはユーザー定義の型と見なされます。
- 「スカラー型」対「集合体型」
- スカラー 型は単一のデータ値を表し、一方、 集合体 型は、同じ型の複数の値、または異なる型の複数の値を表 します。スカラーには、算術型とポインターがあります。集合体型には、配列、構造体があります。C++ クラスは集合体型と見なされます。
| データ・オブジェクト | 基礎 | 複合 | 組み込み |
ユーザー |
スカラー | 集合体 |
|---|---|---|---|---|---|---|
| 整数型 | + | + | + | |||
| 浮動小数点型1 | + | + | + | |||
| 文字型 | + | + | ||||
| ブール型 | + | + | + | |||
| void 型 | +2 | + | + | |||
| ポインター | + | + | + | |||
| 配列 | + | + | + | |||
| 構造体 | + | + | + | |||
| 共用体 | + | + | ||||
| 列挙型 | + | + | 注 3 を参照 | |||
クラス |
+ | + | + |
注:
複素数浮動小数点型は、内部では 2 つのエレメントの配列として表されますが、位置合わせと算術演算については、実浮動小数点型と同じように振る舞います。そのため、複
素数浮動小数点型はスカラー型と見なされます。- void 型は実際に不完全な型であって、これについて は、不完全型で説明しています。にもかかわらず、C++ 標準ではこれを基本型と定義しています。
C 標準では、列挙型をスカラーとしても、集合体としても分類していません。
C++ 標準では、列挙型をスカラーとして分類しています。
不完全型
以下は、不完全型です。
- void 型
- 不明サイズの配列
- 不完全型エレメントの配列
- 定義のない構造体、共用体、または列挙型
宣言されているが、定義されていないクラス型に対するポインター
宣言されているが、定義されていないクラス
配列サイズが、[*] で指定された場合、これ
は可変長配列であることを表し、サイズは指定されたものと見なされ、そのため、配
列型は完全型と見なされます。詳しくは、可変長配列を参照してください。
以下の例は、不完全型を示しています。
void *incomplete_ptr;
struct dimension linear; /* no previous definition of dimension */
互換型および複合型

- 変更なしで一緒に使用できる 2 つの型 (割り当て式の中と同じ)
- 変更なしで一方を他方で置き換えられる 2 つの型
複合型 は、2 つの互換型から構成されます。2 つの互換型から生ずる複合型の決定は、整数型が算術演算子で結合された ときの整数型の通常の 2 項変換の結果と似ています。
明らかに、2 つの同じ型は互換性があります。その複合型は同じ型です。 同一でない型、ユーザー定義型、および型修飾された型の型互換性などを統制する規則は、分 かりにくくなります。型指定子で、C での基本型とユーザー定義型の互換性を説明してい ます。

同一型であることを型互換性の条件とする考え方とは異なる考え方は、C++ では存在し
ません。一般的に、C++ の型検査は C より厳密です。C では互換型が必要なところで、C++ では、同一の型が必要です。