次のコードに遭遇しました。
typedef int var[1]; // or var[3]
それは実際に何をしますか?intの「var」を定義できるようになったので、添字が何を追加するのかわかりません
typedef
宣言は、通常の変数宣言と同じ構文を使用します。x
違いは、「 typeという名前の変数」を宣言する代わりに、「 typeのシノニムであるという名前の型y
」を宣言することです。それ以外の構文は同じです。x
y
それでは、typedef
あなたの例から を削除して、何が得られるか見てみましょう:
int var[1];
var
型がint[1]
、または 1 の配列である変数ですint
。後ろを追加するとtypedef
:
typedef int var[1];
これはvar
type のシノニムになりint[1]
ます。
他の種類の醜いまたは複雑なタイプでも同じことが機能します。
int (*fp)(int); // fp is a function pointer variable
typedef int (*fp)(int); // fp is a function pointer type
identity
次のように宣言されたテンプレートを使用することで、この混乱のほとんどを回避できます。
template <typename T> struct identity { typedef T type; };
このテンプレートを使用すると、複合型または変数宣言の意味がより明確になります。たとえば、次のように型を宣言できます。
typedef identity<int[1] >::type var; // array type
typedef identity<int(*)(int)>::type fp; // function pointer type
また、変数宣言は型宣言と同じ構文を使用するため、複雑な using を持つ変数も宣言できますidentity
。
identity<int[1] >::type var; // array variable
identity<int(*)(int)>::type fp; // function pointer variable
var
int
サイズが 1 の配列の型定義です。
あなたは書ける
var x;
x
型の変数になりますint[1]