首頁  >  文章  >  後端開發  >  為什麼非常量引用不能綁定到 C 中不相關的左值或臨時值?

為什麼非常量引用不能綁定到 C 中不相關的左值或臨時值?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-25 22:17:11396瀏覽

Why Can't Non-Const References Bind to Unrelated Lvalues or Temporaries in C  ?

非常量引用綁定限制

在 C 中,常數引用可以綁定到相同類型和不相關類型的左值。然而,非常量引用在綁定到左值時面臨額外的限制。

無關的左值綁定失敗

考慮以下程式碼:

int a;
double &m = a; // error: non-const lvalue reference to type 'double' cannot bind to a value of unrelated type 'int'

這裡,試著將非常量引用m 綁定到int類型的左值。這會失敗,因為非常量引用無法綁定到不相關的左值。

臨時物件綁定禁止

非常量引用也無法綁定到臨時物件。例如:

double &m = a; // compilation error: temporary bound to non-const reference

在這種情況下,a 到 m 的賦值涉及到將 int 轉換為 double 並建立一個臨時物件。非常量引用不能綁定到這樣的臨時物件。

此限制背後的基本原理是非常量引用需要存取原始物件的位址,這對於臨時物件來說是不可能的,因為它們在使用後立即被銷毀.

Visual Studio 編譯器擴充

要注意的是,在Visual Studio中,此錯誤由於編譯器擴充允許在某些情況下綁定到臨時對象,因此可能不會發生。但是,其他編譯器(例如 GCC)將嚴格執行非約束性規則。

以上是為什麼非常量引用不能綁定到 C 中不相關的左值或臨時值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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