非常量引用綁定限制
在 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中文網其他相關文章!