首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >我应该在什么时候在C++中使用typedef?

我应该在什么时候在C++中使用typedef?
EN

Stack Overflow用户
提问于 2009-02-05 14:59:52
回答 9查看 60.5K关注 0票数 76

在我多年的C++编程中,我从来没有觉得有必要使用typedef,所以我真的不知道它是用来做什么的。我应该在哪里使用它?是否存在首选使用typedef的实际情况?或者这真的是一个C语言特有的关键字?

EN

回答 9

Stack Overflow用户

发布于 2009-02-05 15:08:32

在Bjarne的书中,他指出,您可以使用typedef来处理具有不同整数大小的系统之间的可移植性问题。(这是一段转述)

sizeof(int)为4的机器上,您可以

代码语言:javascript
复制
typedef int int32;

然后在你的代码中到处使用int32。当您转到sizeof(int)为2的C++实现时,您只需更改typdef

代码语言:javascript
复制
typedef long int32;

并且您的程序仍然可以在新的实现上工作。

票数 37
EN

Stack Overflow用户

发布于 2009-02-05 15:05:15

与函数指针一起使用

使用typedef隐藏函数指针声明

代码语言:javascript
复制
void (*p[10]) (void (*)() );

只有少数程序员知道p是一个“10个指针组成的数组,指向一个返回void的函数,并将指针指向另一个返回void且不带参数的函数”。繁琐的语法几乎无法辨别。但是,您可以通过使用typedef声明来大大简化它。首先,为“指向返回void且不带参数的函数的指针”声明一个typedef,如下所示:

代码语言:javascript
复制
  typedef void (*pfv)();

接下来,根据我们之前声明的taking,为“指向返回void并获取pfv的函数的指针”声明另一个typedef:

代码语言:javascript
复制
 typedef void (*pf_taking_pfv) (pfv);

现在我们已经创建了pf_taking_pfv类型定义作为笨拙的“指向返回空的函数的指针并接受pfv”的同义词,声明一个由10个这样的指针组成的数组是轻而易举的事:

代码语言:javascript
复制
  pf_taking_pfv p[10];

from

票数 23
EN

Stack Overflow用户

发布于 2009-02-05 15:12:19

typedef在很多情况下都很有用。

基本上,它允许你为一个类型创建一个别名。当/如果您必须更改类型时,其余代码可以保持不变(当然,这取决于代码)。例如,假设您想要在c++向量上执行iter

代码语言:javascript
复制
vector<int> v;

...

for(vector<int>::const_iterator i = v->begin(); i != v.end(); i++) {

// Stuff here

}

将来你可能会考虑用列表来改变向量,因为你必须在它上面做的操作类型。如果没有typedef,你就必须改变代码中所有出现的向量。但是如果你像这样写的话:

代码语言:javascript
复制
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也可以节省你的时间。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/516237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档