AUTOSAR C++14 Rule A23-0-1
An iterator shall not be implicitly converted to 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 メンバー関数を使用して、for ループ内などで、const 反復子を作成できます。for(std::vector<int>::const_iterator iter{aList.begin()}, end{aList.end()};
iter != end;
++iter) {...}begin と end は非 const 反復子を返すため、const 反復子の iter と end への代入で、暗黙的な変換が行われる必要があります。代わりに、const 反復子を直接返す、新しい C++11 関数の cbegin と cend を利用してください。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) {...}Polyspace 実装
チェッカーは、iterator 型から const_iterator への変換、または reverse_iterator から const_reverse_iterator への変換にフラグを設定します。
トラブルシューティング
ルール違反が想定されるものの、Polyspace® から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。
例
チェック情報
| グループ: コンテナー ライブラリ |
| カテゴリ: Required、Automated |
バージョン履歴
R2020a で導入