typedef existing_type new_type_name; // 例子 typedef char C; typedef unsigned int WORD; typedef char* pChar; typedef char field[50];
C, WORD, pChar, field 分別成為 char, unsigned int, char*, char[50] 的別名。
using new_type_name = existing_type; // 例子 using C = char; using WORD = unsigned int; using pChar = char*; using field = char[50];
語義相同,但 using 更清晰(類似變量聲明),且支持模板別名:
templateusing Vec = vector ; // typedef 無法直接做到 Vec vi; // 等價於 vector
typedef std::map> MapVec; typedef int32_t Int32; 便於移植。using Callback = void(*)(int);| 特性 | typedef | using |
|---|---|---|
| 語法風格 | 舊式(類似聲明變量) | 新式(別名在前,類型在後) |
| 模板別名 | 不支持 | 支持 (template<T> using Alias = ...) |
| 函數指針可讀性 | 較差 | 清晰 |
| 標準 | C++98 | C++11 |