一時的にバインドされた非定数参照: 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 サイトの他の関連記事を参照してください。