Maison >développement back-end >C++ >Pourquoi le `operator[]` de `std::vector` autorise-t-il l'accès hors limites sans erreur ?

Pourquoi le `operator[]` de `std::vector` autorise-t-il l'accès hors limites sans erreur ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-07 11:06:13896parcourir

Why Does `std::vector`'s `operator[]` Allow Out-of-Bounds Access Without Error?

Std :: Accès au vecteur sans erreur malgré les limites

Dans std :: vector, l'accès à l'aide de l'opérateur [] ne déclenche pas d'erreur rapports, même lorsqu'un index est hors limites. Cela peut conduire à des résultats inattendus.

Considérons l'exemple suivant :

struct Element
{
    std::vector<double> face;
};

int main()
{
    Element elm;

    // Insert 6 elements into elm.face
    for (int i = 0; i < 6; i++) elm.face.push_back(i);

    std::cout << elm.face.size() << std::endl; // Prints 6
    std::cout << elm.face[6] << std::endl; // Prints an arbitrary number
}

Comme indiqué, la taille du vecteur est de 6, mais l'accès à l'index inexistant elm.face[6] produit un résultat non -réponse d'erreur. Ce résultat est un comportement indéfini et la valeur renvoyée peut varier en fonction de la plate-forme et de la gestion de la mémoire.

En revanche, utiliser at() pour accéder aux éléments effectue une vérification des limites et lève une exception (std::out_of_range) lorsqu'un l'index est hors limites. Par conséquent, il est recommandé d'utiliser at() au lieu de Operator[] lorsque vous avez besoin d'une vérification des limites.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn