ホームページ >バックエンド開発 >C++ >Visual Studio 2010 で右辺値への非 Const 参照バインドが許可されるのはなぜですか?

Visual Studio 2010 で右辺値への非 Const 参照バインドが許可されるのはなぜですか?

DDD
DDDオリジナル
2024-11-01 20:57:02604ブラウズ

Why Does Visual Studio 2010 Allow Non-Const Reference Binding to Rvalues?

右辺値への非 const 参照のバインドを許可する: VS2010 の異常

C 標準では、右辺値への非 const 参照のバインドを厳しく禁止しています。ただし、特異な異常により、Visual Studio 2010 (SP1) はエラーや警告なしで次のコードをコンパイルします。

<code class="cpp">string foo() { return "hello"; }
int main() {
    string& tem = foo(); // Non-const reference to rvalue
}</code>

コンパイラー動作の不一致

対照的に、その他コンパイラはより厳格な動作を示します。

  • GCC はコンパイル エラーを発行し、右辺値への非 const 参照の不正なバインドを正確に識別します。
  • Visual Studio 2008 はコンパイル警告を提供します。潜在的な問題は認識していますが、コンパイルの続行を許可します。

VS2010 の異常の説明

VS2010 のこの異常な動作は、既知のコンパイラ拡張機能に起因します。 GCC や Visual Studio 2008 とは異なり、VS2010 では、一時オブジェクトを返す関数によって右辺値が生成される場合など、特定の場合に非 const 参照を右辺値にバインドできます。

この拡張機能は標準に反していますが、おそらく便宜上実装されたものと思われます。ただし、参照がバインドされた後に右辺値が変更されると、未定義の動作が発生する可能性があります。

結果と推奨事項

この拡張機能は、依存するコードに微妙なバグを引き起こす可能性があります。 C 標準への適切な準拠が求められます。したがって、VS2010 であっても、非 const 参照を右辺値にバインドしないことを強くお勧めします。代わりに、標準で意図されているように、右辺値にバインドするときは常に const 参照を使用してください。

以上がVisual Studio 2010 で右辺値への非 Const 参照バインドが許可されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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