右辺値への非 const 参照のバインディング: VS2010 の異常
C では、一般的に非 const 参照を右辺値にバインドすることが考慮されます。エラーです。ただし、Visual Studio 2010 では、次のコードはエラーや警告なしでコンパイルされます。
<code class="cpp">string foo() { return "hello"; } int main() { //below should be illegal for binding a non-const (lvalue) reference to a rvalue string& tem = foo(); //below should be the correct one as only const reference can be bind to rvalue(most important const) const string& constTem = foo(); }</code>
この動作は、GCC や VS2008 などの他のコンパイラと矛盾しており、そのようなコードではコンパイル エラーや警告が発生します。この矛盾により、VS2010 のバグであるかどうかについて疑問が生じています。
説明
この場合の VS2010 の動作は、VS コンパイラの既知の拡張機能に起因すると考えられます。 。歴史的に、これらのコンパイラは、明示的な const 修飾なしで、非 const 参照を右辺値にバインドすることを許可してきました。この動作はプログラマの便宜のために導入されたものであり、標準の C 機能とはみなされていません。
サンプル コードでは、VS2010 にエラーや警告がないことは次のように説明できます。
結論
許可する際の VS2010 の動作エラーや警告なしに右辺値にバインドされる非 const 参照は標準 C ではなく、拡張機能とみなされます。これは場合によっては便利ですが、予期しない動作を引き起こす可能性もあり、一般的には、右辺値へのバインドに const 参照を使用することはお勧めできません。
以上がVS2010 では、非 Const 参照を右辺値にバインドできるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。