允許非常量引用綁定到右值:VS2010 異常
C 標準嚴格禁止將非常量引用綁定到右值。然而,在一個特殊的異常情況下,Visual Studio 2010 (SP1) 編譯以下程式碼時沒有任何錯誤或警告:
string foo() { return "hello"; }
int main() {
string& tem = foo(); // Non-const reference to rvalue
}
編譯器行為差異
相比之下,其他編譯器表現出更嚴格的行為:
VS2010 異常解釋
VS2010 中的這種異常行為源自於已知的編譯器擴充。與 GCC 和 Visual Studio 2008 不同,VS2010 在某些情況下允許將非常量參考綁定到右值,例如當右值由傳回臨時物件的函數產生時。
雖然此擴展違反了標準,它可能是為了方便而實施的。但是,如果在綁定引用後修改右值,則可能會導致未定義的行為。
後果與建議
此擴充功能可能會在依賴此擴充功能的程式碼中引入微妙的錯誤正確遵守 C 標準。因此,強烈建議避免將非常量引用綁定到右值,即使在 VS2010 中也是如此。相反,按照標準的預期,在綁定到右值時始終使用 const 引用。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3