首頁 >後端開發 >C++ >C 引用可以重新分配嗎?

C 引用可以重新分配嗎?

Susan Sarandon
Susan Sarandon原創
2024-12-02 12:44:14771瀏覽

Can C   References Be Reassigned?

在 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn