什么是typedef int var [1];做?

时间:2012-08-24 20:24:17

标签: c++ typedef

我遇到了以下代码:

typedef int var[1]; // or var[3]
它实际上做了什么?我不明白下标添加了什么,因为现在我可以为int

定义“var”

2 个答案:

答案 0 :(得分:8)

typedef声明使用与普通变量声明相同的语法。不同之处在于,您声明“名为x的类型,而不是声明类型为y的名为x的变量”,而不是类型y的同义词。“语法在其他方面是相同的。

所以,让我们从您的示例中移除typedef,看看我们得到了什么:

int var[1];

var是一个类型为int[1]的变量,或者是一个int的数组。如果我们添加typedef

typedef int var[1];

这使var成为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

因为变量声明使用与类型声明相同的语法,所以我们也可以使用identity声明具有复杂性的变量:

identity<int[1]     >::type var; // array variable
identity<int(*)(int)>::type fp;  // function pointer variable

答案 1 :(得分:2)

var是大小为1的int数组的类型定义。

你可以写

var x;

x将是int[1]

类型的变量