[C++]typedef用法


參考:C/C++ typedef用法詳解(真的很詳細)

四個用途

  1. 定義一種類型的別名,而不是簡單的宏替換
  2. 定義struct新對象的別名
  3. 定義和平台無關的類型
  4. 為復雜聲明定義一個簡單的別名
typedef char* PCHAR; // 一般用大寫
PCHAR pa, pb; // 可行,同時聲明了兩個指向字符變量的指針

struct tagPOINT1  
{  
    int x;  
    int y;  
};  
struct tagPOINT1 p1;   

typedef struct tagPOINT  
{  
    int x;  
    int y;  
}POINT;  
POINT p1; // 這樣就比原來的方式少寫了一個struct,比較省事,尤其在大量使用的時候

typedef long double REAL; 
//在不支持 long double 的平台二上,改為:
typedef double REAL; 
//在連 double 都不支持的平台三上,改為:
typedef float REAL; 
//也就是說,當跨平台時,只要改下 typedef 本身就行,不用對其他源碼做任何修改。

兩大陷阱

  1. typedef定義了一種類型的新別名,不同於宏,不是簡單的字符串替換

先定義:
typedef char* PSTR;
然后:
int mystrcmp(const PSTR, const PSTR);
const PSTR實際上相當於const char* 嗎?
不是的,它實際上相當於char * const。
原因在於const給予了整個指針本身以常量性,也就是形成了常量指針char* const。
簡單來說,記住當const和typedef一起出現時,typedef不會是簡單的字符串替換就行。

  1. typedef在語法上是一個存儲類的關鍵字(如auto、extern、mutable、static、register等一樣),雖然它並不真正影響對象的存儲特性

如:
typedef static int INT2; //不可行
編譯將失敗,會提示“指定了一個以上的存儲類”。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM