6

次のコードに遭遇しました。

typedef int var[1]; // or var[3]

それは実際に何をしますか?intの「var」を定義できるようになったので、添字が何を追加するのかわかりません

4

2 に答える 2

8

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
于 2012-08-24T20:59:02.267 に答える
2

varintサイズが 1 の配列の型定義です。

あなたは書ける

var x;

x型の変数になりますint[1]

于 2012-08-24T20:26:52.480 に答える