2

配列に typedef を使用する場合は、次のように使用されます。

typedef int Color[3];

それは私にとって非常に直感に反しています。

なぜだめですかtypedef int[3] Color[3]?

4

5 に答える 5

7

typedef通常の vairable 宣言とまったく同じように見えます。これはたまたま C での配列宣言の外観です (そして C++ に継承されます):

int foo[3]; // Array of three int
typedef int FooT[3]; // typedef for array of three int.
于 2013-06-11T15:10:10.220 に答える
4

残念ながら、それが言語の定義方法です。参考までに、typedef構文は宣言構文と同じように見えます。

int Color[3];

3 つの整数の配列を作成するので、次のようになります。

typedef int Color[3];

3 つの整数の配列を型定義します。

構文一致の便利な利点は、次のようなツールを使用してcdecl(1)それらを生成または説明できることです。

cdecl> explain int Color[3]
declare Color as array 3 of int
cdecl> declare Color as array 3 of int
int Color[3]
于 2013-06-11T15:10:21.847 に答える
4

Typedef は単純に変数の定義のように機能し、すべて同じ規則 (既に確立されて既知の規則) に従いますが、変数名の代わりに型を示すという唯一の違いがあります。

いくつかの新しいスキームを実装するのではなく (例として、配列へのポインターとポインターの配列など、すべての微妙なことを処理する必要があります)、既存のスキームを使用することが賢明な選択です。

于 2013-06-11T15:10:45.267 に答える
2

使用することをお勧めします

typedef std::array<int,3> RGB_Type;

これは、他の C++ std コンテナーの typedef と一致しています。

(申し訳ありませんが、C++ のみですが、それはタイトルに記載されていました。)

于 2013-06-11T15:12:42.117 に答える
0

C++11 では、目的に近い構文を作成できます。

template<typename T>
using type_def = T;

type_def<int[3]> colors;

一見すると、私はそれをお勧めしません: 一方、いくつかの本当に複雑な型宣言は、このメカニズムによって大幅に簡素化できます。typedef最終的な型を読みやすくすることのみを目的とする複雑な型の「プレースホルダー」を取り除きます。

于 2013-06-11T15:32:03.810 に答える