C ++:在自定义迭代器上删除后增量运算符是否安全?

时间:2014-04-26 01:33:22

标签: c++ c++11 iterator standards c++-standard-library

根据C++ reference,前向迭代器的要求是它支持后增量运算符(即iterator operator++(int)

我想知道在自定义前向迭代器上disallow这个操作是否安全,即

custom_iterator operator++(int) = delete; // disallow post-increment, i.e. it++
custom_iterator operator++() { ... } // we only define pre-increment, i.e. ++it

并假设STL永远不会在这样的自定义迭代器it++上调用it,当它作为参数传递给STL通用算法时,例如copy,{{1} },sort等?

关于此问题的官方C ++ 11标准的引用将是最有用的,但是大多数实现的答案都是这样做的,并且"也欢迎。

1 个答案:

答案 0 :(得分:4)

所有迭代器必须是可预增量和后增量的。这是输入和输出迭代器的要求的一部分。请参阅C ++11§24.2[iterator.requirements]表107和108.引用表格相当困难,但在两个表中,表达式++rr++必须对迭代器{有效} { {1}}。

所以,不。如果要实现新的迭代器类型,那么该类型的实例必须是前后递增的,并且所有STL算法和任何其他采用迭代器的函数都可以假设后可递增性。

因为迭代器也必须是可复制构造的,所以根据preincrement运算符实现postincrement运算符通常很简单。例如,

r