首頁 >後端開發 >C++ >為什麼 Visual Studio 允許非常量引用綁定到臨時物件?

為什麼 Visual Studio 允許非常量引用綁定到臨時物件?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-24 09:55:25867瀏覽

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

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中文網其他相關文章!

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