C++法則10:引用本身是一個“別名”(alias),一旦綁定到一個對象后,就不能再重新綁定到其他對象。
在C++中,引用(reference)是一個已存在對象的別名。一旦引用被初始化綁定到一個對象,它就不能再被重新綁定到其他對象。這一特性是引用與指針(pointer)的主要區別之一。
關鍵點:
-
別名特性:引用是某個對象的另一個名字,對引用的所有操作都會直接作用于它綁定的對象。
-
必須初始化:引用在定義時必須初始化,且不能為
null
(必須綁定到有效對象)。 -
不可重新綁定:引用一旦綁定到一個對象,其綁定關系無法更改。
-
與指針的區別:
-
指針可以重新指向其他對象(或
nullptr
)。 -
引用更安全,但靈活性較低。
-
int x = 10;
int y = 20;
int& ref = x; // ref是x的別名,綁定到xref = 30; // 修改ref等價于修改x,此時x=30
std::cout << x; // 輸出30// 試圖將ref重新綁定到y(錯誤!)
int& ref = y; // 編譯錯誤:ref已存在,不能重新聲明// 指針可以重新指向
int* ptr = &x;
ptr = &y; // 合法:指針ptr現在指向y
為什么設計為不可重新綁定?
-
安全性:避免引用在程序中被意外修改指向其他對象。
-
語義清晰:引用作為別名,其生命周期內始終代表同一個對象。
注意事項:
-
函數參數傳遞時,常用
const T&
避免拷貝且防止修改。 -
如果需要“重新綁定”的能力,應使用指針(如
T*
)或智能指針(如std::unique_ptr
)。