«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Является ли сравнение итераторов из разных контейнеров неопределенным поведением?

Является ли сравнение итераторов из разных контейнеров неопределенным поведением?

Опубликовано 13 ноября 2024 г.
Просматривать:499

Is Comparing Iterators from Different Containers Undefined Behavior?

Сравнение итераторов из разных контейнеров: разъяснение неопределенного поведения

При работе с итераторами в C важно понимать ограничения сравнения итераторов из разные контейнеры. В этой статье рассматривается вопрос о том, приводит ли выражение foo.begin() == bar.begin() к ложному или неопределенному поведению, где foo и bar представляют собой два отдельных контейнера std::vector.

Согласно Стандарт C 11 (n3337), итераторы из разных контейнеров нельзя сравнивать напрямую. В разделе 24.2.5 говорится, что область действия оператора равенства == для прямых итераторов определяется только для итераторов в одной и той же базовой последовательности. Поскольку разные контейнеры считаются отдельными последовательностями, сравнение итераторов из них является неопределенным поведением.

Кроме того, проблема LWG № 446 специально посвящена этому вопросу. Предложение направлено на добавление в стандарт явного текста, поясняющего, что сравнение итераторов из разных диапазонов, если явно не указано иное, не определено. Это подчеркивает, что даже косвенное сравнение итераторов из разных диапазонов, например использование таких функций, как std::find, может привести к неопределенному поведению.

Поэтому важно избегать сравнения итераторов из разных контейнеров или поддиапазонов разных контейнеров. Это может привести к непредсказуемым результатам, и его следует избегать при использовании надежных методов написания кода.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3