ホームページ > バックエンド開発 > C++ > Visual Studio で一時ファイルへの非 Const 参照バインドが許可されるのはなぜですか?

Visual Studio で一時ファイルへの非 Const 参照バインドが許可されるのはなぜですか?

Mary-Kate Olsen
リリース: 2024-12-24 09:55:25
オリジナル
900 人が閲覧しました

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());
}
ログイン後にコピー

驚くべきことに、gcc がエラーとして識別している間、Visual Studio ではこのコードのコンパイルが許可されています。この現象により、多くの人が Visual Studio のアプローチの背後にある理論的根拠について疑問を抱いています。

詳しく調べると、Visual Studio では古い言語拡張機能が採用されていることがわかりました。 Microsoft のバグ レポートはこの問題を明らかにし、Visual Studio では一時オブジェクトを非 const 参照にバインドできることを強調しています。ただし、この動作は、言語拡張機能を無効にする /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 で一時ファイルへの非 Const 参照バインドが許可されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート