标题说明了一切。给定一个结束的迭代器,它可以在不调用未定义的行为的情况下递增零吗?
一个例子 - 下面的代码是否可以将迭代器返回到指定的索引 - 如果索引超出范围,则返回end
?
std::vector<Type>::iterator Class::fromIndex(size_t index) {
return member_vector.begin() + std::min(index, member_vector.size());
}
如果std::advance
或std::next
的行为不同,那么我们也很有兴趣知道,但在此我特别感兴趣的是operator+
。
答案 0 :(得分:6)
这是一个定义明确的无操作,比如我。
给定一个结束的迭代器,可以在不调用未定义的行为的情况下将其递增0吗? [..] 我特别感兴趣的是运营商
+
。
对于随机访问迭代器,[random.access.iterators]
下的表115告诉我们(在&#34;操作语义&#34; 之后,以及&#34;扩展&#34;意思是给出while
循环(r += 0) ≡ r
,(.end() += 0) ≡ .end()
。
r + 0
的定义就此而言。
如果
std::advance
或std::next
的行为不同,那么也很有趣。
对于其他所有内容,std::next
是根据std::advance
定义的,[iterator.operations]
中没有n
明确说明这是明确定义的但是从措辞,遵循&#34;增量&#34; /&#34;减少&#34;:&#34;增量(或负i
的减量)迭代器参考的英语定义n
&#34;。{/ em>
FragmentManager#executePendingTransactions();
我们知道英语&#34;增量&#34; /&#34;减少&#34;在所有实际条件下,零都是无操作。