typedef 用法

来源:互联网 发布:软件协会会员牌匾 编辑:程序博客网 时间:2024/06/10 01:57

typedef是c语言中给类型赋别名的工具。且不同于#define的宏义,在预编译时工作。typedef在运行时工作。

typedef不能与auto、extern、mutable、static、register等关键字出现在同一个表达式中。

它有如下优点与用法:

1.按功用设计,方便理解代码。

typdef int size;  // 定义size getSize();   // 使用
2.简化代码,隐藏数组、指针和模板类

typdef char str[300];  // 定义str s;                 // 等价于 char str[300];typedef char* ptr;     // 定义ptr a;                 // 等于 char* a; typedef std::vector<int> array;  //定义array a;                         // 等价于std::vector<int> 
3.平台无关数据类型

 这个也是最常用的,比如整型在各个平台上长度可能不一样,使用typedef 可以以统一的名称使用相同的整型类型。
 否则,平台A使用INT32表示32位整型,平台B使用__INT表示32位整型。这时分别使用

typdef INT32 int;typdef __INT int;
就可以以统一的int在这两个平台上使用32位整型数据。

4.函数指针
 这个功能非常有用。
 普通函数
int func(int a){return a;}typedef int (*F)(int);F f = func;(*f)(2);


 类成员函数
class A{public:int func(int a){return a;}};typedef int (A::*CF)(int);CF cf = &A::func;A a;(a.*cf)(2);A* a2 = &a;(a2->*cf)(2);
指针函数在循环场景中需要确定调用函数时很有用,类似于:
int funcA(){...}int funcB(){...}bool flag = true;for(int i=0; i<n; ++i){    if(flag)        funcA();    else        funcB();}
这种情况下使用函数指针非常方便。
int funcA(){...}int funcB(){...}typdef int(*F)();bool flag = true;F f;if(flag)  f = funcA;else      f = funcB;for(int i=0; i<n; ++i){    f();}


0 0
原创粉丝点击