通常の反復子 (または同様の範囲またはビュー クラス) を対応する const_iterator から派生させることは良い習慣ですか?
その動機は、
- コードを共有し、
- イテレータ/ビューが大きい場合、変換を回避します。
例として、3D グリッドのビュー、つまりグリッドのセクションを考えてみましょう。1 つのポインタ、3 つのサイズ、および 2 ~ 3 のストライドを含み、合計で 384 バイトになります。
const バージョンと mutating バージョンには、多くの共通機能 (読み取り専用の 3D グリッドで実行できること) があります。
上記の例の反対の動機は、const ビューに const ポインターが含まれているため、変化するビューconst_cast
でそれを使用するか、非 const ポインターに同じアドレスを含む余分なフィールドを追加する必要があることです。