typedef用法小结

C++Primer上对于typedef使用的目的有下面三种理解:

  • 隐藏特定类型的实现,强调使用类型的目的
  • 简化复杂类型的定义,使其更容易理解
  • 允许一种类型用于多个目的,同时使得使用该类型的目的明确

对于这些抽象的总结,结合一些网络上的信息,做一些举例和扩展。

1. 最基本的用法,为已知类型定义一个别名.

typedef int int_32;
typedef short int_16;
typedef long long int_64;

int_32 length;
int_16 count;
int_64 total;

 

 

2. 定义复合类型,隐藏细节

  与指针和数组结合使用:

typedef int pArray[20];
pArray a; // int a[20];

typedef int *ptr_t;
ptr_t p;   //int * p;

typedef void (*fparam)();
typedef void *(*fp[20])(fparam);
fp a;  //void *(*a[20])(void(*)());

 

  与struct结合使用:

typedef struct Self{
  int i; 
  Self *p;
}Self;
Self a;

 

3. 允许一种类型用于多个目的,使用该类型的目的明确

int *p1, p2, p3; //only p1 is a point.
typedef int *ptr_t;
ptr_t p1, p2, p3; // p1, p2, p3 are all points.

typedef并不是简单的文本展开,可以结合关键字define做比较

#define ptr_d int *
ptr_d p1, p2, p3; // int * p1, p2, p3;

typedef string *pstring;
const pstring cstr;  //string * const cstr

上面的例子中,const修饰的是pstring的类型,如果按照文本展开,可能会被理解为

const string * cstr;

这样以来, const修饰的是string,而不是string*,与原本表达的意思不一致。

4. typedef 的其他特点

typedef 的作用域从其定义的位置开始,到最近的代码块结束为止,与变量定义的作用范围类似。

define 的作用域从其定义的位置开始,到文件结束为止,两者略有不同。

 

posted @ 2014-08-26 16:21  AlisaHan  阅读(269)  评论(0)    收藏  举报