非常量左值引用與暫時綁定
在C 中,非常量左值引用應該綁定到相同或相同的左值派生型別。但是,某些情況(例如綁定到臨時物件)可能會導致錯誤。
為什麼以下程式碼有效?
int a; const double &m = a;
在這種情況下,引用綁定到左值,並且由於引用是 const,因此無法修改左值。只要類型相容,這在 C 中是允許的。
但是,當嘗試將非常量左值參考綁定到不同類型的左值時,會發生錯誤:
int a; double &m = a;
錯誤:對類型「double」的非常量左值引用無法綁定到不相關類型“int”的值
引發此錯誤是因為暫時涉及。從 int 到 double 的隱式類型轉換會建立一個臨時物件。非常量引用不能綁定到臨時對象,因為它們要求對象具有已知的生命週期和位置。就其本質而言,臨時物件的存在時間有限。
由於編譯器擴充功能允許在某些情況下綁定到臨時對象,因此 Visual Studio 可以編譯此程式碼而不會出現錯誤。但是,像 GCC 這樣的編譯器會正確標記此錯誤。
下面的範例示範了使用者定義類型的類似問題:
struct Foo {}; Foo &obj = Foo(); // error: binding non-const reference to temporary
理解這個概念對於在C 中正確處理引用至關重要並避免與物件生命週期相關的運行時問題。
以上是為什麼非常量左值引用不能綁定到 C 中的臨時變數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!