c++中typedef

今天在学习sizeof的时候偶遇typedef这个关键字,抱着不弄明白不死心的心态,在网上搜了些资料,加上自己的理解写下这篇typedef,权当自己用来见证自己进步和备忘的。

typedef 照我理解就是取别名。

取别名一:

typedef char * SChar;

这里给char * 类型的指针重新取了哥SChar的别名,则在以后的代码中要定义Char * 就可以这样写 SChar 如:

char * a 等价于 SChar a;

为结构体取别名:

typedef struct test1

{

  char a;

}Test;

则 Test代表了 Struct test1,

Test a 等价于 struct test1 a;

取别名三,通过取别名实现平台兼容性

例如:

比如定义一个叫 REAL 的浮点类型,在目标平台一上,让它表示最高精度的类型为:

typedef long double REAL;

在不支持 long double 的平台二上,改为:

typedef double REAL;

在连 double 都不支持的平台三上,改为:

typedef float REAL;

也就是说,当跨平台时,只要改下 typedef 本身就行,不用对其他源码做任何修改。

取别名四:为复杂函数指针或者类型取一个语义简单明了的别名。

如:定义函数指针时可以这样定义: int (*fn1)(int *p);如果这样写就是定义了一个名字为fn1的指向一个返回类型为int,参数类型为int指针的函数指针,如果接下来还要定义一个类似的函数指针还得这样写int (*fn2)(int *p),这样写可读性和修改性不是很强。如果我们用typedef 就解决了以上问题。

typedef int (* pFn)(int *p);

pFn fn1;

pFn fn2;

以上等价于上面的定义了两个函数指针。显然这样写代码的可读性明显提高了很多,同时,如果pFn指针的类型变了的话也只要修改typedef处代码即可。

原文地址:https://www.cnblogs.com/quandeboke/p/2998784.html