ホームページ >バックエンド開発 >C++ >Visual Studio は一時ファイルへの非定数参照をコンパイルするのに、他のコンパイラはコンパイルしないのはなぜですか?

Visual Studio は一時ファイルへの非定数参照をコンパイルするのに、他のコンパイラはコンパイルしないのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-25 20:24:13176ブラウズ

Why Does Visual Studio Compile Non-Constant References to Temporaries While Other Compilers Don't?

一時的にバインドされた非定数参照: 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());
}

コードは、関数によって返される一時オブジェクトに非定数参照 (Zebra &x) をバインドしようとします。 グー()。 C 標準によれば、これはコンパイル エラーになるはずです。

Visual Studio 拡張機能

ただし、Visual Studio には、この動作を可能にする古い拡張機能があります。この拡張機能は基本的に、一時オブジェクトへの参照を非一時オブジェクトへの参照であるかのように扱います。

この拡張機能は、レガシー コード ベースをサポートするために導入されました。ただし、予期しない動作が発生する可能性があるため、通常は推奨されません。

推奨されるアプローチ

これらの異常を回避するには、/Za を使用して拡張機能を無効にすることが最善です。コンパイラフラグ。これにより、コードが C 標準に準拠し、さまざまなコンパイラで一貫して処理されることが保証されます。

以上がVisual Studio は一時ファイルへの非定数参照をコンパイルするのに、他のコンパイラはコンパイルしないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。