首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

C++ 型別別名與物件別名:typedef、using、reference 深度解析

     編輯:VC 教學

兩種「別名」的本質差異

層面型別別名物件別名
目的為既有型別取新名字為既有物件取新名字
關鍵字typedef / using (C++11)& (參考/引用)
實體編譯期概念,不佔記憶體執行期綁定,同一記憶體位址
可變性不可變(別名即型別)綁定後不可重新綁定

型別別名:typedef vs using

// 傳統 typedef
typedef int Integer;
typedef void (*FuncPtr)(int);

// C++11 using(語法更清晰,支援模板別名)
using Integer = int;
using FuncPtr = void(*)(int);
template<typename T> using Vec = std::vector<T>;
// Vec<int> 即 std::vector<int>

using 優勢:讀寫順序符合直覺、支援模板別名、與 auto 風格一致。現代 C++ 建議全面改用 using。

物件別名:參考


int x = 10;
int& ref = x; // ref 是 x 的別名
ref = 20;     // x 變為 20
// 參考必須初始化,且一生綁定同一物件

參考不是物件,無記憶體位址(編譯器通常用指標實作),sizeof(ref) == sizeof(x)。

C# 對應:using 別名指示詞


using People = MyNamespace.Human; // 型別別名
// C# 無 typedef,也無參考語意的別名(ref/out 僅用於參數傳遞)

進階:typedef/using 與指標/const 陷阱


typedef char* PChar;
const PChar p1 = "hello"; // 等價 char* const p1:指標常數,指向可修改
// 非 const char* const p2:指向常數字元的指標
using PChar = char*;
const PChar p3 = "hello"; // 同上,using 不改變語意

口訣:const 修飾的是左邊最近的型別;若左邊無型別則修飾右邊。typedef/using 定義的名稱視為單一型別實體,const 整體套用。

實戰建議

  1. 標頭檔公開介面:使用 using 定義公開型別別名(如 using Handle = void*;)。
  2. 實作細節:內部 using 簡化複雜型別(using Map = std::unordered_map<Key, Value>;)。
  3. 函數參數:需修改呼叫端變數用 T&,唯讀用 const T&,避免拷貝。
  4. 避免濫用 typedef 定義指標型別(如 typedef Node* PNode;),隱藏指標語意易誤用;改用智慧指標或直白寫 Node*。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved