Range-for-Loops et std::vector
Lors de l'utilisation de boucles for basées sur une plage avec des conteneurs de bibliothèque standard, le Le type de données de l'itérateur dicte souvent le type de données de la variable du compteur. Dans le cas de std::vector
Dans le premier exemple :
<code class="cpp">std::vector<int> intVector(10); for (auto& i : intVector) std::cout << i;
Le std::vector< ;int> contient des entiers, donc le type d'itérateur est un std::vector Maintenant, considérons le deuxième exemple : Ici, le std : :vecteur La solution consiste à utiliser auto&&, qui se liera à une référence lvalue s'il s'agit d'une référence lvalue, ou créera une copie temporaire de la rvalue s'il s'agit d'une référence temporaire : Avec cette modification, le code affichera le contenu de boolVector comme prévu. 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!<code class="cpp">std::vector<bool> boolVector(10);
for (auto& i : boolVector)
std::cout << i;</code>
<code class="text">invalid initialization of non-const reference of type ‘std::_Bit_reference&’ from an rvalue of type ‘std::_Bit_iterator::reference {aka std::_Bit_reference}’</code>
<code class="cpp">for (auto&& i : boolVector)
std::cout << i;</code>