Visual Studio 將非常量引用綁定到臨時物件的奇怪案例
Visual Studio 將非常量引用綁定到臨時物件的行為已引發由於其看似矛盾的性質,一些程式設計師感到驚訝。要理解上下文,請考慮以下程式碼片段:
class Zebra {int x;}; Zebra goo() {Zebra z; return z;} void foo(Zebra &x) { Zebra y; x = y; foo(goo()); }
令人驚訝的是,Visual Studio 允許編譯此程式碼,而 gcc 將其識別為錯誤。這種現象讓許多人對 Visual Studio 方法背後的基本原理感到好奇。
經過仔細檢查,結果發現 Visual Studio 採用了較舊的語言擴充。 Microsoft 錯誤報告揭示了這個問題,強調 Visual Studio 允許將臨時物件綁定到非常量參考。但是,可以使用 /Za 編譯器選項來修正此行為,該選項會停用語言擴充。
要進一步說明此擴展,請考慮以下程式碼:
struct A {}; A f1(); void f2(A&); int main() { f2(f1()); // This line triggers an error with `/Za` enabled }
要進一步說明此擴展,請考慮以下程式碼:
作為解決方法,Visual Studio 支援此類情況的4 級警告,可以透過在編譯期間指定/W4 來激活該警告。不過,值得注意的是,這種方法仍然允許程式碼編譯,凸顯了 Visual Studio 擴充功能的靈活性。以上是為什麼 Visual Studio 允許非常量引用綁定到臨時物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!