根据C++参考,前向迭代器的要求是支持增量后运算符(即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、sort、fill等)时?
在这个问题上引用官方的C++11标准将是最有用的,但“大多数实现做到这一点”之类的回答也是受欢迎的。
发布于 2014-04-26 02:03:35
所有迭代器都必须是前后增量的。这是输入和输出迭代器需求的一部分。请参见C++11§24.2iterator.requirements表107和108。很难引用这些表,但在这两个表中,表达式++r和r++必须对迭代器r有效。
所以,没有。如果您正在实现一个新的迭代器类型,则该类型的实例必须是前后递增的,并且所有STL算法和任何其他采用迭代器的函数都可能具有后增量性。
因为迭代器也必须是可复制的,所以按照增量前运算符来实现后增量运算符通常是很简单的。例如,
MyIterator operator++(int)
{
MyIterator original(*this);
++*this;
return original;
}https://stackoverflow.com/questions/23305547
复制相似问题