エラー: Visual Studio の一時オブジェクトにバインドされた非定数参照
一時オブジェクトを非定数オブジェクトに割り当てると、GCC でエラーが発生します参照。驚くべきことに、Visual Studio ではこれが可能です。なぜ不一致が生じるのでしょうか?
その説明は、Visual Studio の古い拡張機能にあります。バグ レポート「一時オブジェクトを非 Const 参照にバインドできる」に記載されているように、Visual Studio では、未定義の動作が発生する可能性があっても、一時オブジェクトを非 Const 参照にバインドできます。
これその行動は物議を醸している。バグレポートに対する 1 つの回答では、このエラーにはレベル 4 の警告があると記載されており、これは「/W4」コンパイラ フラグで有効にできます。
ただし、これを Visual でエラーにする方法があります。 Studio: 「/Za」フラグを使用して言語拡張機能を無効にします。これは、厳密な C 標準に準拠し、潜在的に問題のあるコードの動作を回避したい場合に役立つ回避策です。
説明するには、次の例を考えてみましょう。
class Zebra { int x; }; Zebra goo() { Zebra z; return z; } void foo(Zebra &x) { Zebra y; x = y; foo(goo()); // Error in GCC, allowed in Visual Studio }
Visual Studio では、このコードはエラーなしでコンパイルされます。ただし、GCC では、一時オブジェクトが非 const 参照に割り当てられるため、コンパイル エラーが発生します。
以上がVisual Studio では非 Const 参照の一時オブジェクトへのバインドが許可されるのに、GCC では許可されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。