Provoquer une erreur en C ? " />
En C , les boucles for basées sur une plage offrent un moyen pratique de parcourir les éléments d'un conteneur. Cependant, certains comportements peuvent sembler surprenants lorsqu'ils sont utilisés avec des conteneurs de valeurs booléennes.
Considérez le code suivant :
<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>
La première boucle parcourt avec succès intVector et imprime les éléments entiers. Cependant, la deuxième boucle entraîne l'erreur suivante :
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)
Cette erreur se produit car std::vector
Pour parcourir un std::vector
<code class="cpp">for (auto&& i : boolVector) std::cout << i;</code>
En utilisant auto&&, le compilateur se réduira correctement en une référence lvalue s'il reçoit de vraies références de valeur booléenne ou liera et maintiendra en vie les proxys temporaires s'il reçoit des références aux proxys.
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!