首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++:删除自定义迭代器上的增量后操作符安全吗?

C++:删除自定义迭代器上的增量后操作符安全吗?
EN

Stack Overflow用户
提问于 2014-04-26 01:33:22
回答 1查看 264关注 0票数 0

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

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

代码语言:javascript
复制
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泛型算法(如copysortfill等)时?

在这个问题上引用官方的C++11标准将是最有用的,但“大多数实现做到这一点”之类的回答也是受欢迎的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-26 02:03:35

所有迭代器都必须是前后增量的。这是输入和输出迭代器需求的一部分。请参见C++11§24.2iterator.requirements表107和108。很难引用这些表,但在这两个表中,表达式++rr++必须对迭代器r有效。

所以,没有。如果您正在实现一个新的迭代器类型,则该类型的实例必须是前后递增的,并且所有STL算法和任何其他采用迭代器的函数都可能具有后增量性。

因为迭代器也必须是可复制的,所以按照增量前运算符来实现后增量运算符通常是很简单的。例如,

代码语言:javascript
复制
MyIterator operator++(int)
{
    MyIterator original(*this);
    ++*this;
    return original;
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23305547

复制
相关文章

相似问题

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