Heim >
Artikel > Backend-Entwicklung > Warum verursacht die Verwendung einer bereichsbasierten For-Schleife mit std::vector
Einen Fehler in C verursachen? " />
In C bieten bereichsbasierte for-Schleifen eine bequeme Möglichkeit, Elemente in einem Container zu durchlaufen. Allerdings Bestimmte Verhaltensweisen können überraschend erscheinen, wenn sie mit Containern mit booleschen Werten verwendet werden.
Betrachten Sie den folgenden Code:
<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>
Die erste Schleife durchläuft erfolgreich den intVector und gibt die ganzzahligen Elemente aus. Die zweite Schleife führt jedoch zu folgendem Fehler:
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)
Dieser Fehler tritt auf, weil sich std::vector
Um einen std::vector
<code class="cpp">for (auto&& i : boolVector) std::cout << i;</code>
Durch die Verwendung von auto&& kollabiert der Compiler korrekt in eine L-Wert-Referenz, wenn er echte boolesche Wertreferenzen erhält, oder bindet und hält die temporären Proxys am Leben, wenn er Verweise auf Proxys erhält.
Das obige ist der detaillierte Inhalt vonWarum verursacht die Verwendung einer bereichsbasierten For-Schleife mit std::vector