Range-for-Loops と std::vector
C では、範囲ベースの for ループにより反復が簡素化されます。コンテナ。ただし、これらのループを std::vector
次のコード スニペットを検討してください。
<code class="cpp">std::vector<int> intVector(10); for(auto& i : intVector) std::cout << i;</code>
このコードintVector コレクションを反復処理し、各要素を出力します。ただし、 intVector を std::vector
<code class="cpp">std::vector<bool> boolVector(10); for(auto& i : boolVector) std::cout << i;</code>
この変更されたコードによりエラーが発生します:
error: invalid initialization of non-const reference of type ‘std::_Bit_reference&’ from an rvalue of type ‘std::_Bit_iterator::reference {aka std::_Bit_reference}’
基礎となるメカニズム:
std:: により矛盾が生じます。ベクトル
std::vector
解決策:
これを解決するには、範囲内で auto&&& を使用します。 -based ループ:
<code class="cpp">for(auto&& i : boolVector) std::cout << i;</code>
auto&&& 構文は反復子参照の型をチェックします。左辺値参照の場合は、同じままです。それ以外の場合は、一時プロキシにバインドして保存し、コードが正しく実行できるようにします。
以上が`std::vector` で範囲ベースの For ループを使用するとエラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。