プログラミング言語において、データの型を新たに定義すること、あるいはその定義自体を指します。
ある名前(識別子)があらわすものを具体的に記述する「定義」と呼ばれる行為の一種であり、その名前が特定のデータ型となる場合を型定義と呼びます。既存の型に別名を付けることを含むことがあります。
既存の複雑な型に分かりやすい別名を付けて用途を明確にすることで、ソースコードの可読性や保守性を高める目的でよく用いられます。
C言語では、typedefキーワードを使用することにより、既存の型に別名を付けることができ、この方法を指して型定義 (type definitions) と呼ばれています。
// unsigned long 型に ulong という別名を付ける(=ulong型を型定義する)
typedef unsigned long ulong;この方法は、構造体や共用体などの複雑な型に簡潔な名前を与えるために使用することもあります。
typedef struct point_tag {
int x;
int y;
} Point;詳細は、C言語編「整数型」を参照してください。
広い意味では、構造体型や共用体型、列挙型を新たに定義することも型定義と呼ぶことがありますが、標準規格として Type definitions という用語が使われているのは typedefキーワードを使用した場合に限られています。
C++ でも、C言語と同様に typedefキーワードを使用して型定義を行うことができます。C++11以降では、usingキーワードを使用したエイリアス宣言による方法も提供されており、using にはテンプレートに別名を与えられる機能があります(エイリアステンプレート)。
// typedef を使用した型定義
typedef unsigned long ulong;
// using を使用したエイリアス宣言
using ulong = unsigned long;標準規格はいずれの場合にも、C言語のような「Type definitions」という呼び名を使っていません。また、いずれの方法でも、新たに定義される型は既存の型の別名であり、その名前は typedef名と表現されます。
なお、C言語と異なり、struct (class)、union、enum を使用して新たな構造体型などを作る際、その名前自体が型名となるため、別名を付ける必要性自体がなくなっています。
詳細は、新C++編「符号無し整数」を参照してください。
C言語と同様、広い意味では、クラス型(構造体型)、共用体型、列挙型を新たに定義することも型定義と呼ぶことがあるほか、テンプレートがインスタンス化されて新たな型が生成されることを指して、型定義と呼ぶこともあります。
Programming Place Plus のトップページへ
| はてなブックマーク に保存 | Facebook でシェア | X で ポスト/フォロー |
| LINE で送る | noteで書く |
|
| 管理者情報 | プライバシーポリシー |