| 特性 | 指針 | 引用 |
|---|---|---|
| 可為空 | 是 (nullptr) | 否,必須綁定對象 |
| 初始化 | 可延後 | 聲明時必須初始化 |
| 重新綁定 | 可隨時指向新對象 | 終生綁定初始對象,不可改變 |
| 語法 | *p, p-> | .(像直接操作對象) |
引用無需空值檢查,代碼更簡潔高效:
void printDouble(const double& rd) { cout << rd; } // 無需檢查
void printDouble(const double* pd) { if(pd) cout << *pd; } // 必須檢查
如 operator[] 返回可賦值目標:
vector<int> v(10);
v[5] = 10; // 返回引用,語法自然
// 若返回指針:*v[5] = 10; 易誤解為指針容器
char *pc = 0;
char& rc = *pc; // 未定義行為!引用綁定空指針解引用
若擔心此類濫用,寧可全用指針,或提升團隊代碼審查標準。