我遇到了以下代码:
typedef int var[1]; // or var[3]
它实际上做了什么?我不明白下标添加了什么,因为现在我可以为int 定义“var”
答案 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]