ホームページ >バックエンド開発 >C++ >Visual Studio では非 Const 参照の一時オブジェクトへのバインドが許可されるのに、GCC では許可されないのはなぜですか?

Visual Studio では非 Const 参照の一時オブジェクトへのバインドが許可されるのに、GCC では許可されないのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-22 19:58:10764ブラウズ

Why Does Visual Studio Allow Non-Const References to Bind to Temporary Objects While GCC Doesn't?

エラー: 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 サイトの他の関連記事を参照してください。

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