如何使用typedef来别名C ++数组?

时间:2013-06-11 15:06:59

标签: c++ c

对数组使用typedef时,它用作

typedef int Color[3];
这对我来说非常违反直觉。

为什么不typedef int[3] Color[3]?

5 个答案:

答案 0 :(得分:6)

typedef看起来像正常变量声明完全,这恰好是数组声明在C中的外观(并继承到C ++中):

int foo[3]; // Array of three int
typedef int FooT[3]; // typedef for array of three int.

答案 1 :(得分:4)

我担心这就是定义语言的方式。如果它有用,typedef语法看起来就像声明语法:

int Color[3];

会产生三个整数的数组,所以:

typedef int Color[3];

Typedefs一个包含三个整数的数组。

语法匹配的一个便利优势是您可以使用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]

答案 2 :(得分:4)

Typedef只是像一个变量定义一样工作,并遵循所有相同的规则(已经建立和已知的规则),唯一的区别是它代表变量名称,它表示类型。

我想说,而不是实现一些新的方案(必须处理所有微妙的事情,例如,为了示例,指向数组与指针数组的指针),使用现有方案是明智的选择。

答案 3 :(得分:1)

我建议使用

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

这与typedef-ing其他C ++ std容器一致。

(对不起,仅限C ++,但标题中提到了这一点。)

答案 4 :(得分:0)

在C ++ 11中,您可以创建一个接近您想要的语法:

template<typename T>
using type_def = T;

type_def<int[3]> colors;

乍一看,我建议反对它:另一方面,通过这种机制可以简化一些非常复杂的类型声明。摆脱复杂类型中的“占位符”typedef,其目的只是使最终类型看起来更具可读性。