次のコードに遭遇しました。
typedef int var[1]; // or var[3]
それは実際に何をしますか?intの「var」を定義できるようになったので、添字が何を追加するのかわかりません
typedef宣言は、通常の変数宣言と同じ構文を使用します。x違いは、「 typeという名前の変数」を宣言する代わりに、「 typeのシノニムであるという名前の型y」を宣言することです。それ以外の構文は同じです。xy
それでは、typedefあなたの例から を削除して、何が得られるか見てみましょう:
int var[1];
var型がint[1]、または 1 の配列である変数ですint。後ろを追加するとtypedef:
typedef int var[1];
これはvartype のシノニムになり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
varintサイズが 1 の配列の型定義です。
あなたは書ける
var x;
x型の変数になりますint[1]