Итератор не должен быть неявно преобразован в const_iterator
Итератор не должен быть неявно преобразован в const_iterator.
Стандарт C++ 11 вводит функции-члены, такие как cbegin
и cend
который возвращает соединительные итераторы в контейнеры. Чтобы создать const итераторов, используйте эти представителей функции вместо таких функций, как begin
и end
которые возвращают неконстовые итераторы и затем требуют неявных преобразований.
Для образца рассмотрим 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 итераторов iter
и end
соответственно, должно произойти неявное преобразование. Вместо этого воспользуйтесь новыми функциями C++ 11 cbegin
и 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) {...}
Флажки Checker преобразуются в iterator
типа на
const_iterator
или reverse_iterator
на const_reverse_iterator
.
Если вы ожидаете нарушения правил, но не видите его, обратитесь к разделу «Стандартные нарушения кодирования не отображаются».
Группа: Библиотека языковой поддержки |
Категория: Необходимый, Автоматизированный |