我遇到了以下代码:
typedef int var[1]; // or var[3]
它实际上是做什么的?我不明白下标添加了什么,因为现在我可以为 int 定义“var”
typedef
声明使用与普通变量声明相同的语法。不同之处在于,不是声明“一个名为x
type的变量”,而是声明“一个名为y
typex
的同义词的类型y
”。语法在其他方面是相同的。
所以,让我们typedef
从你的例子中删除,看看我们得到了什么:
int var[1];
var
是一个变量,其类型是int[1]
,或者是一个 的数组int
。如果我们添加typedef
后面:
typedef int var[1];
这使var
type 成为同义词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
var
int
是大小为 1 的数组的类型定义。
你可以写
var x;
并且x
将是一个类型的变量int[1]