对数组使用typedef时,它用作
typedef int Color[3];
这对我来说非常违反直觉。
为什么不typedef int[3] Color[3]?
答案 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
,其目的只是使最终类型看起来更具可读性。