【发布时间】:2018-01-05 14:57:41
【问题描述】:
我正在为基于索引的类实现迭代器。有一个最大有效值;我的问题是当客户端代码使迭代器超出我的end() 值时该怎么办:
-
operator++()是否应该始终检查我没有超过结尾?或者 -
operator*()是否应该始终检查我没有超过末尾,而迭代器可以(无用地)前进或移动到末尾?
请解决一个非调试设置,在该设置中我不能确定愚蠢的开发人员不会尝试将他们的指针推进到末尾。
【问题讨论】:
-
一般来说,至少在调试版本中进行检查是个好主意。并且两个函数都应该有验证,因为你不能在最后取消引用迭代器。
-
我会
assert()这些支票。 -
@Phil1970:好的,但请参阅编辑。
-
@melpomene:好的,但请参阅编辑。
-
刚刚在源代码周围徘徊,我见过的所有实现都没有。基本上,一旦你增加了结束,所有的赌注都结束了。虽然我同意其他 cmets - 我倾向于在调试版本中断言。