右辺値への非 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>
コンパイラー動作の不一致
対照的に、その他コンパイラはより厳格な動作を示します。
VS2010 の異常の説明
VS2010 のこの異常な動作は、既知のコンパイラ拡張機能に起因します。 GCC や Visual Studio 2008 とは異なり、VS2010 では、一時オブジェクトを返す関数によって右辺値が生成される場合など、特定の場合に非 const 参照を右辺値にバインドできます。
この拡張機能は標準に反していますが、おそらく便宜上実装されたものと思われます。ただし、参照がバインドされた後に右辺値が変更されると、未定義の動作が発生する可能性があります。
結果と推奨事項
この拡張機能は、依存するコードに微妙なバグを引き起こす可能性があります。 C 標準への適切な準拠が求められます。したがって、VS2010 であっても、非 const 参照を右辺値にバインドしないことを強くお勧めします。代わりに、標準で意図されているように、右辺値にバインドするときは常に const 参照を使用してください。
以上がVisual Studio 2010 で右辺値への非 Const 参照バインドが許可されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。