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 的作用域从其定义的位置开始,到文件结束为止,两者略有不同。

浙公网安备 33010602011771号