首頁 >後端開發 >C++ >為什麼 Visual Studio 2010 允許非常量參考綁定到右值?

為什麼 Visual Studio 2010 允許非常量參考綁定到右值?

DDD
DDD原創
2024-11-01 20:57:02604瀏覽

Why Does Visual Studio 2010 Allow Non-Const Reference Binding to Rvalues?

允許非常量引用綁定到右值:VS2010 異常

C 標準嚴格禁止將非常量引用綁定到右值。然而,在一個奇怪的異常情況中,Visual Studio 2010 (SP1) 編譯以下程式碼時沒有任何錯誤或警告:

<code class="cpp">string foo() { return "hello"; }
int main() {
    string& tem = foo(); // Non-const reference to rvalue
}</code>

編譯器行為差異

相反,其他編譯器表現出更嚴格的行為:

  • GCC發出編譯錯誤,正確辨識非常量引用到右值的非法綁定。
  • Visual Studio 2008 提供編譯警告,承認潛在問題,但允許繼續編譯。

VS2010 異常解釋

VS2010 中的這種異常行為源自於已知的編譯器擴充。與 GCC 和 Visual Studio 2008 不同,VS2010 在某些情況下允許將非常量參考綁定到右值,例如當右值由傳回臨時物件的函數產生時。

雖然此擴充違反了標準,它可能是為了方便而實施的。但是,如果在綁定引用後修改右值,則可能會導致未定義的行為。

後果和建議

此擴充功能可能會將微妙的錯誤引入依賴於正確遵守 C 標準。因此,強烈建議避免將非常量引用綁定到右值,即使在 VS2010 中也是如此。相反,按照標準的預期,在綁定到右值時始終使用 const 引用。

以上是為什麼 Visual Studio 2010 允許非常量參考綁定到右值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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