允許非常量引用綁定到右值:VS2010 異常
C 標準嚴格禁止將非常量引用綁定到右值。然而,在一個奇怪的異常情況中,Visual Studio 2010 (SP1) 編譯以下程式碼時沒有任何錯誤或警告:
<code class="cpp">string foo() { return "hello"; } int main() { string& tem = foo(); // Non-const reference to rvalue }</code>
編譯器行為差異
相反,其他編譯器表現出更嚴格的行為:
VS2010 異常解釋
VS2010 中的這種異常行為源自於已知的編譯器擴充。與 GCC 和 Visual Studio 2008 不同,VS2010 在某些情況下允許將非常量參考綁定到右值,例如當右值由傳回臨時物件的函數產生時。
雖然此擴充違反了標準,它可能是為了方便而實施的。但是,如果在綁定引用後修改右值,則可能會導致未定義的行為。
後果和建議
此擴充功能可能會將微妙的錯誤引入依賴於正確遵守 C 標準。因此,強烈建議避免將非常量引用綁定到右值,即使在 VS2010 中也是如此。相反,按照標準的預期,在綁定到右值時始終使用 const 引用。
以上是為什麼 Visual Studio 2010 允許非常量參考綁定到右值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!