august 发表于 2007-8-8 15:17:53

typedef的用法

typedef char * a;
// a is a pointer to a char

typedef a b();
// b is a function that returns
// a pointer to a char

typedef b *c;
// c is a pointer to a function
// that returns a pointer to a char

typedef c d();
// d is a function returning
// a pointer to a function
// that returns a pointer to a char

typedef d *e;
// e is a pointer to a function
// returning a pointer to a
// function that returns a
// pointer to a char

e var;
// var is an array of 10 pointers to
// functions returning pointers to
// functions returning pointers to chars

请问这些都是什么意思呢?

ultranet 发表于 2007-8-8 16:07:48

typedef A B就是給A一個別名叫B,僅此而已,不要胡思亂想,不要想得太過複雜了。

august 发表于 2007-8-8 16:16:30

但也应该理解下嘛

coolpay64 发表于 2007-8-8 17:53:20

其實這兒想說function也可當成data type啦

shawind 发表于 2007-8-8 20:03:46

c++里面的不爽处之一.
这个东西很会误导人.
看字面typedef,新学的都会以为这意思就是定义新类型,
其实上它的实质意思是alias(别名)(也就是ultranet说的那个意思)
这么多年了,一直都没有改过来,国际标准化组织也真是敢于明知故犯.

FantasyDR 发表于 2007-8-9 00:30:46

typedef是为了让代码显得更加有意义,或者是把很长的类型简写。

比如这种:
stdext::hash_set<Renderable*>
用typedef就可以简化:
typedef stdext::hash_set<Renderable*> RenderSet;

以后用RenderSet来代替前面的类型即可,并且是带有类型检查的。特别是定义很长很长很长的函数指针,都可以通过typedef来给它赋予更清晰易读的名字。

有的时候根据编译环境的不同,同一个类型名可能指向不同的基本定义。譬如UNICODE相关的字符串定义TCHAR。在编译为UNICODE的情况下,TCHAR代表wchar_t,否则代表char。如果没有typedef,那么就得使用#define,而#define是没有类型检查的。

#ifdef_UNICODE
typedef   wchar_t   TCHAR;
#else
typedef   char   TCHAR;
#endif

august 发表于 2007-8-12 08:54:38

好像有点难理解

lw 发表于 2007-8-12 09:00:44

简单去理解 就和使用
int a = obj.subobj1.subobj2.subobj3.u->com.i.data.l;
差不多(这个是运行期,而TYPEDEF是编译期),没有什么必要性,看起来更加自然些

(不过也有必要性的地方,比如模板的类似递归用法……,这里略)
比如: 假设一个小型字符串,可以固定不会超过32个字符就应该用
typedef char string;
如果有误导性那么还是不要用了,偶现在主要用纯C或者扩展C,所以对很多惯用法也不熟悉……

coolpay64 发表于 2007-8-12 12:30:05

不是 typedef char string; 嗎?

Zelsazgh 发表于 2007-8-12 12:58:42

*( * (char* pFun( ) ) ( ) )
页: [1] 2
查看完整版本: typedef的用法