Visual Studio 中綁定到非常量引用的臨時物件
臨時物件是否可以綁定到非常量引用的問題一直是程式設計師爭論的話題,特別是在Visual Studio 的環境。當程式碼在 Visual Studio 中編譯但在其他編譯器(例如 gcc)中產生錯誤時,就會發生此問題。
要理解問題,請考慮以下程式碼:
class Zebra { int x; }; Zebra goo() { Zebra z; return z; } void foo(Zebra &x) { Zebra y; x = y; foo(goo()); }
令人驚訝的是,Visual Studio 允許這段程式碼編譯沒有錯誤。然而,gcc 將其視為編譯時錯誤。這種差異引發了將臨時物件綁定到非常量引用的有效性問題。
為了解決這個問題,需要注意的是,Microsoft 為其編譯器引入了一個擴展,該擴展允許將臨時物件綁定到非常量引用。此行為違反了禁止此類綁定的 C 標準。
Microsoft 錯誤報告「臨時物件可以綁定到非常量引用」提供了對此行為的進一步深入了解。它指出此擴充功能是標準的例外,在 Visual Studio 中預設為啟用。
但是,錯誤報告也建議使用禁用語言擴充的「/Za」編譯器選項可能會導致編譯失敗的程式碼,遵循 C 標準。這表示 Visual Studio 在這種情況下的行為是故意背離標準的。
因此,雖然 Visual Studio 允許將臨時物件綁定到非常量引用,但它是背離 C 標準的擴充。嚴格遵守該標準的編譯器在遇到此類程式碼時會產生錯誤。建議使用此擴充功能時謹慎行事,因為它可能會導致意外行為或可移植性問題。
以上是Visual Studio 中的暫存物件可以綁定到非常量參考嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!