| 特性 | 引用 | 指針 |
|---|---|---|
| 初始化 | 定義時必須綁定 | 可延遲、可為 nullptr |
| 重新綁定 | 不可(終身忠於初始對象) | 可隨時指向新對象 |
| 空值 | 不存在空引用(未定義行為) | nullptr 合法 |
| sizeof | 被引用對象大小 | 指針自身大小(4/8 字節) |
| const | 無 const reference 概念(引用本身不可變) | 有 const T* / T* const |
| 類型安全 | 編譯期強類型檢查 | 可強制轉型,風險較高 |
引用本質是 指針常量的語法糖:T& ref = obj; ≈ T* const ref = &obj;。編譯器自動解引用,生成代碼幾乎相同。
需要「可選」或「可變目標」? → 指針
需要「不可為空」且「不可重綁」? → 引用
函數參數傳遞大對象? → const 引用
函數返回對象別名? → 引用(注意生命週期)
需要指針運算/數組遍歷? → 指針
vector& ref = vec[0]; 觸發擴容後失效
3. const int& r = 10; 延長臨時量壽命(合法),但 int& r = 10; 非法