#cpp
К примеру у нас есть: std::lista; std::list b; auto iter0 = a.begin(); auto iter1 = b.begin(); if(iter0 != iter1) { ... } Понятно, что итераторы никогда не будут равны для разных контейнеров, но мне интересно, что говорит по этому стандард? Это неопределенное поведение, или нет?
Ответы
Ответ 1
Да, это неопределенное поведение. Сравнение итераторов из разных контейнеров не допускается. Оператор == требует, чтобы оба итератора итерировали по одной и той же последовательности [iterator.concept.forward]p2 Что интересно, стандарт C++14 разрешил сравнение между собой однотипных value-инициализированных итераторов std::vector::iterator a{}, b{}; assert(a == b); но сравнение таких итераторов с другими "нормальными" итераторами по-прежнему не допускается.
Комментариев нет:
Отправить комментарий