6

我遇到了以下代码:

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

它实际上是做什么的?我不明白下标添加了什么,因为现在我可以为 int 定义“var”

4

2 回答 2

8

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

所以,让我们typedef从你的例子中删除,看看我们得到了什么:

int var[1];

var是一个变量,其类型是int[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

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

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 回答