C でエラーが発生しますか? " />
C では、範囲ベースの for ループは、コンテナー内の要素を反復処理する便利な方法を提供します。ただし、ブール値のコンテナーで使用すると、特定の動作が驚くように見えるかもしれません。
次のコードを考えてみましょう。
<code class="cpp">std::vector<int> intVector(10); for (auto& i : intVector) std::cout << i; std::vector<bool> boolVector(10); for (auto& i : boolVector) std::cout << i;</code>
最初のループは、intVector とただし、2 番目のループでは次のエラーが発生します。
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}’ for (auto& i : boolVector)
このエラーは、std::vector
std::vector
<code class="cpp">for (auto&& i : boolVector) std::cout << i;</code>
auto&& を使用すると、コンパイラは、真のブール値参照が指定された場合は左辺値参照に正しく折りたたまれ、プロキシへの参照が指定された場合は一時プロキシをバインドして存続させます。
以上がstd::vector