使常规迭代器(或类似的范围或视图类)从相应的 const_iterator 派生是一种好习惯吗?
这样做的动机是
- 共享代码,以及
- 当迭代器/视图很大时,避免转换。
例如,考虑 3D 网格的视图,即网格的一部分。它可能包含 1 个指针、3 个大小和 2-3 个步长,总共 384 个字节。
const 和 mutating 版本将具有许多通用功能(您可以对只读 3D 网格进行任何操作)。
上述示例的反动机是 const 视图包含一个 const 指针,因此变异视图必须执行 aconst_cast
才能使用它,或者在非常量指针中添加一个包含相同地址的额外字段。