在 C 中可以重新分配引用嗎?
在 C 中,引用通常被吹捧為必須一勞永逸地初始化的不可變實體。然而,最近的一個程式碼片段對此原則提出了疑問。
程式碼片段:
觀察:
問題:
此程式碼是否真正重新指派引用 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中文網其他相關文章!