C++ typedef 用法詳解

typedef是替一個對象取一個別名,以此增強程序的可讀性。

1 定義一種數據類型的別名

typedef int INT;  //定義int類型的一個別名INT。注意:末尾的分號

typedef char* pStr;

2 定義結構體的別名(很久遠的事情了,現在C++已經不存在這個問題)

struct sPositon     //結構體定義
{
    int x;
    int y;
};
struct sPositon p;  //定義變量

如上所示,定義變量時還是加struct關鍵字,比較繁瑣。

typedef struct sPosition  //定義結構體
{
    int x;
    int y;
}POINT;
POINT p;                 //定義結構體變量

如上所示,省去了struct關鍵字,但是這個在C++中已經不需要了

3 定義與平臺無關的類型

如某一平臺支持int類型,但不支持long類型。則可以使用typedef定義一個支持類型的別名,程序中使用該別名聲明變量。
這樣跨平臺時,我們只使用極小的代價。標準庫中廣泛使用。

4 爲複雜的聲明定義一個簡單的別名

例如函數指針:typedef int (*SUM) (int, int)。SUM是定義的別名,表示的是一個指向函數的指針,該函數有兩個int類型的參數,返回一個int類型的值。
則SUM類型的對象可以指向任何符合上述規則的函數。例如:

#include<iostream>
using namespace std;

typedef int (*SUM)(int,int);
int fun0(int a,int b);
int fun1(int a,int b);
int main()
{
    A a;
    a = fun0;
    a(1,2);
    a = fun1;
    a(4,5);
    return 0;
}
int fun0(int a,int b)
{
    cout<<a+b<<endl;
    return a+b;
}
int fun1(int a,int b)
{
    cout<<a+b<<endl;
    return 0;
}

5 typedef需要注意的事項-常量指針

例如:

typedef char* pStr;
const char* p1 = "cui";
const pStr  p2 = "cui";
p1++;    //正常
p2++;    //編譯報錯

p1和p2都是常量指針,即指針指向的內容不能修改,而指針所指地址是可以修改的。
p1++,不用解釋,因爲常量指針是可變的。
p2是我們定義的別名,而不是系統固有類型,編譯器在編譯時,會認爲p2是常量,不可修改,所以p2++會報錯。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章