Heim >Backend-Entwicklung >C++ >Warum kann ich „auto&' nicht mit „std::vector' in einer Range-for-Loop verwenden?
Range-for-Loops mit std::vector
In C werden Range-for-Loops häufig zum Iterieren verwendet über STL-Container. Beim Versuch, diesen Ansatz mit einem std::vector
Beachten Sie den folgenden Codeausschnitt:
<code class="cpp">std::vector<int> intVector(10); for(auto& i : intVector) std::cout << i;</code>
Dieser Code funktioniert, weil std: :vector
Wenn wir jedoch versuchen, denselben Vorgang mit einem std::vector
<code class="cpp">std::vector<bool> boolVector(10); for(auto& i : boolVector) std::cout << i;</code>
Dies liegt daran, dass std::vector
Proxys sind temporäre Objekte, die nicht an eine L-Wert-Referenz gebunden werden können. Aus diesem Grund können wir auto& in der obigen Range-for-Schleife nicht verwenden. Stattdessen müssen wir auto&& verwenden, das eine korrekte Bindung an eine L-Wert-Referenz herstellt, wenn eine gegeben wird, oder den temporären Proxy am Leben erhält, wenn ihm ein Proxy gegeben wird. Hier ist der korrigierte Code:
<code class="cpp">for(auto&& i : boolVector) std::cout << i;</code>
Das obige ist der detaillierte Inhalt vonWarum kann ich „auto&' nicht mit „std::vector' in einer Range-for-Loop verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!