在我多年的C++编程中,我从来没有觉得有必要使用typedef
,所以我真的不知道它是用来做什么的。我应该在哪里使用它?是否存在首选使用typedef
的实际情况?或者这真的是一个C语言特有的关键字?
发布于 2009-02-05 15:08:32
在Bjarne的书中,他指出,您可以使用typedef来处理具有不同整数大小的系统之间的可移植性问题。(这是一段转述)
在sizeof(int)
为4的机器上,您可以
typedef int int32;
然后在你的代码中到处使用int32
。当您转到sizeof(int)
为2的C++实现时,您只需更改typdef
typedef long int32;
并且您的程序仍然可以在新的实现上工作。
发布于 2009-02-05 15:05:15
与函数指针一起使用
使用typedef隐藏函数指针声明
void (*p[10]) (void (*)() );
只有少数程序员知道p是一个“10个指针组成的数组,指向一个返回void的函数,并将指针指向另一个返回void且不带参数的函数”。繁琐的语法几乎无法辨别。但是,您可以通过使用typedef声明来大大简化它。首先,为“指向返回void且不带参数的函数的指针”声明一个typedef,如下所示:
typedef void (*pfv)();
接下来,根据我们之前声明的taking,为“指向返回void并获取pfv的函数的指针”声明另一个typedef:
typedef void (*pf_taking_pfv) (pfv);
现在我们已经创建了pf_taking_pfv类型定义作为笨拙的“指向返回空的函数的指针并接受pfv”的同义词,声明一个由10个这样的指针组成的数组是轻而易举的事:
pf_taking_pfv p[10];
发布于 2009-02-05 15:12:19
typedef在很多情况下都很有用。
基本上,它允许你为一个类型创建一个别名。当/如果您必须更改类型时,其余代码可以保持不变(当然,这取决于代码)。例如,假设您想要在c++向量上执行iter
vector<int> v;
...
for(vector<int>::const_iterator i = v->begin(); i != v.end(); i++) {
// Stuff here
}
将来你可能会考虑用列表来改变向量,因为你必须在它上面做的操作类型。如果没有typedef,你就必须改变代码中所有出现的向量。但是如果你像这样写的话:
typedef vector<int> my_vect;
my_vect v;
...
for(my_vect::const_iterator i = v->begin(); i != v.end(); i++) {
// Stuff here
}
现在,您只需更改一行代码(即从"typedef vector<int> my_vect
“更改为"typedef list<int> my_vect
"),一切都会正常工作。
当你有复杂的数据结构需要写很长的时间(并且很难读)时,typedef也可以节省你的时间。
https://stackoverflow.com/questions/516237
复制相似问题