首頁 >後端開發 >C++ >C 引用是否可以重新分配,或者是否發生了其他情況?

C 引用是否可以重新分配,或者是否發生了其他情況?

Susan Sarandon
Susan Sarandon原創
2024-12-04 22:07:13404瀏覽

Can C   References Be Reassigned, or Is Something Else Happening?

在 C 中可以重新分配引用嗎?

在 C 中,引用通常被吹捧為必須一勞永逸地初始化的不可變實體。然而,最近的一個程式碼片段對此原則提出了疑問。

程式碼片段:

觀察:

  • 程式碼編譯成功,沒有錯誤。
  • 輸出顯示 ri 最初指向 i,然後更改為引用 j。

問題:

此程式碼是否真正重新指派引用 ri 還是其他內容發生了嗎?

答案:

不,ri 仍然是 i 的引用。表面上的重新賦值實際上是透過引用 ri 對 i 進行了修改。

說明:

當聲明引用時(例如int &ri = i),它會綁定到物件(在本例中為i),並在整個程式中保持與其連結。代碼 ri = j 不會重新分配 ri,而是引用 ri 修改 i 的值。

為了證明這一點,可以使用 &ri 和 &i 列印 ri 和 i 的位址,這將表明它們仍然存在相同。此外,如果將 ri 重新指派給 j,則將無法再透過 ri 修改 i,但給定程式碼中的情況並非如此。

結論:

雖然程式碼片段中的引用似乎是可重新分配的,但事實並非如此。相反,它們間接修改它們所引用的物件。 Const 引用(例如 const int &cri = i)可防止此類修改並強制執行真正的不變性。

以上是C 引用是否可以重新分配,或者是否發生了其他情況?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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