Maison > développement back-end > C++ > le corps du texte

La comparaison d'itérateurs de différents conteneurs est-elle un comportement indéfini ?

Susan Sarandon
Libérer: 2024-11-02 17:53:29
original
561 Les gens l'ont consulté

Is Comparing Iterators from Different Containers Undefined Behavior?

Comparaison d'itérateurs de différents conteneurs : clarification d'un comportement non défini

Lorsque vous travaillez avec des itérateurs en C, il est important de comprendre les limites de la comparaison des itérateurs de différents conteneurs. Cet article examine la question de savoir si l'expression foo.begin() == bar.begin() génère un comportement faux ou indéfini, où foo et bar sont deux conteneurs std::vector distincts.

Selon le Norme C 11 (n3337), les itérateurs de différents conteneurs ne peuvent pas être directement comparés. La section 24.2.5 indique que le domaine de l'opérateur d'égalité == pour les itérateurs directs n'est défini que pour les itérateurs sur la même séquence sous-jacente. Étant donné que différents conteneurs sont considérés comme des séquences distinctes, comparer leurs itérateurs est un comportement indéfini.

De plus, le numéro 446 du LWG répond spécifiquement à cette question. La proposition vise à ajouter un texte explicite à la norme clarifiant que la comparaison d'itérateurs de différentes plages, sauf définition contraire explicite, n'est pas définie. Cela souligne que même la comparaison indirecte d'itérateurs de plages distinctes, par exemple en utilisant des fonctions telles que std::find, peut entraîner un comportement indéfini.

Par conséquent, il est essentiel d'éviter de comparer des itérateurs de différents conteneurs ou sous-plages de différents conteneurs. Cela pourrait conduire à des résultats imprévisibles et devrait être évité dans le cadre de pratiques de code robustes.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal