C++的typedef關(guān)鍵字有什么用途?怎么用?

typedefc++++中用于為現(xiàn)有類(lèi)型定義別名的關(guān)鍵字,主要作用是提升代碼可讀性、簡(jiǎn)化復(fù)雜類(lèi)型聲明并增強(qiáng)維護(hù)性。其核心用途包括:1. 簡(jiǎn)化復(fù)雜類(lèi)型的聲明,如結(jié)構(gòu)體指針或模板類(lèi)型,通過(guò)typedef可減少重復(fù)書(shū)寫(xiě);2. 提高代碼可讀性與可維護(hù)性,通過(guò)有意義的別名明確變量用途,例如用typedef int status表示函數(shù)狀態(tài)返回值;3. 配合結(jié)構(gòu)體和枚舉使用,省略Structenum關(guān)鍵字,使代碼更簡(jiǎn)潔;4. 注意typedef并非宏替換,而是編譯階段處理的類(lèi)型別名,且與const結(jié)合時(shí)順序會(huì)影響結(jié)果,此外c++11后可用using替代typedef實(shí)現(xiàn)類(lèi)似功能,尤其在模板類(lèi)型中更為直觀。

C++的typedef關(guān)鍵字有什么用途?怎么用?

typedef 是 C++ 中一個(gè)很實(shí)用的關(guān)鍵字,它的主要用途是給已有的類(lèi)型起一個(gè)新的名字。這在寫(xiě)代碼時(shí)可以提升可讀性、簡(jiǎn)化復(fù)雜類(lèi)型的書(shū)寫(xiě)方式,并且有助于代碼維護(hù)。

比如 unsigned long long 這個(gè)類(lèi)型比較長(zhǎng),如果你頻繁使用它,每次寫(xiě)都挺麻煩的。這時(shí)候就可以用 typedef 給它起個(gè)別名,例如:

typedef unsigned long long ull;

之后你就可以直接用 ull 來(lái)定義變量了:

立即學(xué)習(xí)C++免費(fèi)學(xué)習(xí)筆記(深入)”;

ull number = 1000000;

一、簡(jiǎn)化復(fù)雜類(lèi)型的聲明

有些類(lèi)型嵌套起來(lái)非常復(fù)雜,比如結(jié)構(gòu)體指針、數(shù)組或者模板類(lèi)型。這個(gè)時(shí)候 typedef 就特別有用了。

舉個(gè)例子,如果你有一個(gè)結(jié)構(gòu)體:

struct Student {     int id;     char name[50]; };

你想定義多個(gè)這種結(jié)構(gòu)體變量,每次都寫(xiě) struct Student 比較啰嗦。可以用 typedef 簡(jiǎn)化一下:

typedef struct {     int id;     char name[50]; } Student;

這樣就可以直接寫(xiě):

Student s1, s2;

甚至更進(jìn)一步,如果你想定義指向這個(gè)結(jié)構(gòu)體的指針類(lèi)型,也可以用:

typedef struct {     int id; } *PStudent;

然后可以直接用 PStudent 表示結(jié)構(gòu)體指針:

PStudent ps;

二、提高代碼可讀性和可維護(hù)性

通過(guò)給類(lèi)型起有意義的別名,可以讓代碼更容易理解。比如:

typedef int Status;

這樣當(dāng)你看到函數(shù)返回值是 Status 類(lèi)型的時(shí)候,就知道這是用來(lái)表示狀態(tài)的整數(shù),而不是普通的 int。

再比如:

typedef double Coordinate;

這樣在處理坐標(biāo)相關(guān)邏輯時(shí),代碼語(yǔ)義會(huì)更清晰:

Coordinate x, y;

而不是:

double x, y; // 可能不知道這是坐標(biāo)還是其他數(shù)值

三、配合結(jié)構(gòu)體和枚舉一起使用

在定義結(jié)構(gòu)體或枚舉的時(shí)候,通常我們會(huì)同時(shí)定義類(lèi)型別名,這樣就不需要每次都加 struct 或 enum 關(guān)鍵字。

例如定義枚舉:

typedef enum {     red,     GREEN,     BLUE } Color;

之后就可以直接使用:

Color c = RED;

而不是:

enum Color c = RED;

對(duì)于結(jié)構(gòu)體也是一樣,前面的例子已經(jīng)說(shuō)明了這一點(diǎn)。


四、注意幾點(diǎn)常見(jiàn)用法和陷阱

  • typedef 不是宏替換
    它是在編譯階段處理的類(lèi)型別名,不是簡(jiǎn)單的文本替換。比如:

    typedef char* PCHAR;

    如果你寫(xiě):

    PCHAR a, b;

    實(shí)際上等價(jià)于:

    char *a, *b;

    而不是 char *a, b;(后者只有 a 是指針)

  • typedef 和 const 的順序會(huì)影響結(jié)果

    比如:

    typedef char* PCHAR; const PCHAR p = NULL;

    這里 p 是指向 char 的常量指針,即不能改變指針指向的內(nèi)容,但指針本身可以變。

    如果寫(xiě)成:

    const char* p;

    效果是一樣的。

  • C++11 后還有 using 可以替代 typedef

    比如:

    using MyInt = int;

    在模板類(lèi)型中尤其方便:

    using VecOfVec = std::vector<std::vector<int>>;

    比 typedef 更直觀一些。


基本上就這些。typedef 雖然看起來(lái)簡(jiǎn)單,但在實(shí)際項(xiàng)目中非常有用,尤其是在封裝復(fù)雜類(lèi)型或做跨平臺(tái)兼容時(shí),用好了能顯著提升代碼質(zhì)量。

以上就是C++的

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊15 分享
站長(zhǎng)的頭像-小浪學(xué)習(xí)網(wǎng)月度會(huì)員