Visual Studio で非 Const 参照にバインドされた一時オブジェクト
一時オブジェクトを非 Const 参照にバインドできるかどうかという問題は、特に 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()); }
驚くべきことに、Visual Studio では次のことが可能です。このコードはエラーなしでコンパイルされます。ただし、gcc はこれをコンパイル時エラーとして扱います。この矛盾により、一時オブジェクトを非 const 参照にバインドすることの妥当性について疑問が生じます。
これに対処するには、Microsoft がコンパイラに拡張機能を導入したことに注意することが重要です。これにより、一時オブジェクトを非 const 参照にバインドできるようになります。非const参照。この動作は、そのようなバインディングを禁止する C 標準に反しています。
Microsoft のバグ レポート「Temporary Objects Can be Bound to Non-Const References」は、この動作についてのさらなる洞察を提供します。この拡張機能は標準の例外であり、Visual Studio ではデフォルトで有効になっていると記載されています。
ただし、バグ レポートでは、言語拡張機能を無効にする "/Za" コンパイラ オプションを使用すると、 C 標準に従って、コードがコンパイルに失敗する可能性があります。これは、この場合の Visual Studio の動作が標準から意図的に逸脱していることを示しています。
したがって、Visual Studio では一時オブジェクトを非 const 参照にバインドできますが、これは C 標準から逸脱する拡張機能です。 。標準に厳密に準拠しているコンパイラは、そのようなコードに遭遇するとエラーを生成します。この拡張機能を使用する場合は、予期しない動作や移植性の問題が発生する可能性があるため、注意することをお勧めします。
以上がVisual Studio で一時オブジェクトを非 Const 参照にバインドできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。