Visual Studio 2010 で非 Const 参照を右辺値にバインドできるのはなぜですか?

Barbara Streisand
リリース: 2024-10-28 10:05:29
オリジナル
150 人が閲覧しました

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

Visual Studio 2010: Rvalue への非 Const 参照のバインドを許可する

問題:

次のコード スニペットでは、一時的な右辺値への非 const 参照の無効な初期化であるように見えますが、Visual Studio 2010 (SP1) コンパイラはエラーや警告なしで正常にコンパイルされます。

<code class="cpp">string foo() { return "hello"; }
int main()
{
    string& tem = foo(); // Should be illegal
}</code>
ログイン後にコピー

期待される動作:

C 標準によれば、非 const 参照を右辺値にバインドすることはエラーまたは警告とみなされます。これは、非 const 参照は左辺値 (永続アドレスを持つオブジェクト) にのみバインドされる必要があるためです。

VS2010 の動作:

ただし、Visual Studio 2010 コンパイラーは歴史的にこの実践を言語の拡張として許可しました。この動作は C 標準に従っていないため、一般にバグとみなされます。

理由:

この動作の理由は完全には明らかではありませんが、これは、Visual Studio コンパイラがエラー チェックと警告に関して常に寛容であるという事実に関連していると考えられています。この緩さは、C 標準に従っていませんが、コード記述の柔軟性を高めるために意図的に導入された可能性があります。

影響:

この動作は影響を与える可能性があります。コードの安全性とパフォーマンスのために。非定数参照を右辺値にバインドすると、右辺値がいつでも変更または破棄される可能性があるため、予期しない結果が生じる可能性があります。

解決策:

推奨される解決策非定数参照を右辺値にバインドしないようにするためです。代わりに、const 参照 (左辺値と右辺値の両方にバインドできる) またはポインターを使用します。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!