Pourquoi l'erreur de vecteur C n'apparaît-elle pas lors d'un accès hors limites avec l'opérateur [] ?
Lorsque vous travaillez avec des vecteurs C, vous peut être confronté à un comportement curieux : tenter d'accéder à un élément au-delà de sa taille à l'aide de l'opérateur crochet ([ ]) ne déclenche pas d'erreur. Cela diffère de la fonction membre at(), qui effectue une vérification des limites.
Exemple :
Considérez le code suivant :
std::vector<double> face; face.push_back(2.3); // Insert 1st element face.push_back(4.5); // Insert 2nd element face.push_back(6.7); // Insert 3rd element face.push_back(8.9); // Insert 4th element face.push_back(11.1); // Insert 5th element face.push_back(13.3); // Insert 6th element std::cout << face.size() << std::endl; // Prints 6 std::cout << face[6] << std::endl; // Prints some number without an error
Explication :
La classe std::vector fournit la fonction membre at() pour un accès sécurisé aux éléments dans les limites du vecteur. Si un index en dehors de la plage valide est utilisé, at() renvoie une exception std::out_of_range.
En revanche, l'opérateur [] n'effectue aucune vérification des limites. Si vous tentez d'accéder à un élément au-delà de la taille du vecteur en utilisant [], cela produira des résultats indéfinis. En pratique, cela se traduit généralement par l'accès à de la mémoire qui n'appartient pas au vecteur, ce qui peut entraîner un comportement imprévisible ou des plantages.
Recommandation :
Pour éviter de tels problèmes, il est fortement recommandé d'utiliser la fonction membre at() pour accéder aux éléments dans les limites du vecteur. Cela garantit qu'une erreur est générée lorsqu'une tentative est effectuée pour accéder à un index non valide.
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!