首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >常规迭代器(或类似的范围/视图类)应该从const_iterator派生吗?

常规迭代器(或类似的范围/视图类)应该从const_iterator派生吗?
EN

Stack Overflow用户
提问于 2015-03-02 21:20:37
回答 1查看 99关注 0票数 1

让常规迭代器(或类似的范围或视图类)从相应的const_iterator派生是一种良好的实践吗?

这方面的动机

  • 共享代码,以及
  • 当迭代器/视图很大时,避免转换。

例如,考虑三维网格的视图,即网格的一部分。它可能包含一个指针,3个大小和2-3步幅,总共384字节.

const和变体版本将有许多共同的功能(任何你可以做的只读3D网格)。

上面示例的anti-motivation是,const视图包含一个const指针,因此发生变化的视图必须执行一个const_cast才能使用它,或者在一个非const指针中添加一个包含相同地址的额外字段。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-02 21:27:07

如果const_iterator和迭代器之间存在继承,则可能会发生相反的情况。也就是说,const迭代器提供了导航的基本能力,可变迭代器增加了修改目标的能力(通过允许对const_iterator内部的受保护访问来实现)。

编辑:最初提出的关于从迭代器派生const_iterator的问题。正如我和大卫·罗德里格斯几乎同时指出的那样,这是一个糟糕的想法。

使用从const_iterator派生迭代器的修订问题,David的注释提供了最好的响应。这是可以做到的,但这通常不是一个好主意。

作为一个反问题:您认为在这种情况下使用继承有什么好处?如果有优势,那么有一个同时派生迭代器和const_iterator的公共基类(公共基类,iterator_impl)是否具有相同的优势?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28819644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档