首頁 >後端開發 >C++ >為什麼非常量左值引用不能綁定到 C 中的臨時變數?

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

Patricia Arquette
Patricia Arquette原創
2024-12-06 14:20:131023瀏覽

Why Can't Non-Const Lvalue References Bind to Temporaries in C  ?

非常量左值引用與暫時綁定

在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中文網其他相關文章!

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