Maison >développement back-end >C++ >Pourquoi ne puis-je pas utiliser « auto& » avec « std :: vector » dans une plage pour boucle ?
Range-for-Loops avec std::vector
En C, les range-for-loops sont couramment utilisées pour itérer sur les conteneurs STL. Cependant, on peut rencontrer une erreur en essayant d'utiliser cette approche avec un std::vector
Considérez l'extrait de code suivant :
<code class="cpp">std::vector<int> intVector(10); for(auto& i : intVector) std::cout << i;</code>
Ce code fonctionne parce que std : :vecteur
Cependant, si nous essayons d'effectuer la même opération avec un std::vector
<code class="cpp">std::vector<bool> boolVector(10); for(auto& i : boolVector) std::cout << i;</code>
C'est parce que std::vector
Les proxys sont des objets temporaires qui ne peuvent pas être liés à une référence lvalue. C'est pourquoi nous ne pouvons pas utiliser auto& dans la plage pour boucle ci-dessus. Au lieu de cela, nous devons utiliser auto&&, qui se liera correctement à une référence lvalue si on lui en donne une ou maintiendra le proxy temporaire en vie s'il reçoit un proxy. Voici le code corrigé :
<code class="cpp">for(auto&& i : boolVector) std::cout << i;</code>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!