Итератор не должен быть неявно преобразован в const_iterator
Итератор не должен быть неявно преобразован в const_iterator.
Стандарт C++ 11 вводит функции-члены, такие какcbegin и cend возвращает итераторы const контейнерам. Чтобы создать итераторы const, используйте эти функции-члены вместо функций, таких как begin и end которые возвращают итераторы, отличные от const, а затем требуют неявных преобразований.
Например, рассмотрим std::list контейнер:
std::list<int> aList = {0, 0, 1, 2};begin и end функции-члены контейнера для создания итераторов const, например, в for цикл:for(std::vector<int>::const_iterator iter{aList.begin()}, end{aList.end()};
iter != end;
++iter) {...}begin и end возврат итераторов, отличных от const, и для назначения итераторам const iter и end соответственно, должно произойти неявное преобразование. Вместо этого используйте новые функции C++ 11cbegin и cend который непосредственно возвращает итераторы const:for(std::vector<int>::const_iterator iter{aList.cbegin()}, end{aList.cend()};
iter != end;
++iter) {...}auto:for(auto iter{aList.cbegin()}, end{aList.cend()};
iter != end;
++iter) {...}Средство проверки помечает преобразования из типа iterator кому const_iterator или reverse_iterator кому const_reverse_iterator.
Если вы ожидаете нарушения правила, но не видите его, обратитесь к разделу Нарушения стандартов кодирования не отображаются.
| Группа: Библиотека поддержки языка |
| Категория: Обязательно, Автоматизировано |