在 C 中重新分配引用
在 C 中,引用通常被描述為到記憶體位址的不可變綁定。然而,最近的一個問題引發了人們對這種理解的質疑。為了探討這個主題,讓我們檢查以下 C 程式:
#include <iostream> int main() { int i = 5, j = 9; int &ri = i; std::cout << "ri is: " << ri << '\n'; i = 10; std::cout << "ri is: " << ri << '\n'; ri = j; // Is this not reassigning the reference? std::cout << "ri is: " << ri << '\n'; return 0; }
此程式碼編譯成功,其輸出為:
ri is: 5 ri is: 10 ri is: 9
問題出現了:賦值 ri 不是嗎? = j;與不可變引用的概念相矛盾?
不,ri 仍然是 i 的引用。 這可以透過列印 ri 和 i 的位址並觀察它們是否相同來驗證。
實際發生的是 ri 引用被用來修改 i 的值。為 ri 分配新值確實是被禁止的,因為引用是不可變的,並且必須始終指向相同的記憶體位置。
為了進行比較,請考慮以下程式碼:
const int &cri = i;
這程式碼不允許對 cri 進行賦值,因為它是對常數的引用。這表明,雖然引用不能重新分配到新的記憶體位置,但它們仍然可以用於修改它們引用的位址處的值,前提是該值是可變的。
總而言之,ri = j;原始程式中的賦值並不是對引用本身的重新賦值,而是對其引用的值進行了修改。
以上是C 引用可以重新分配嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!