可以将随机访问迭代器结束递增0吗?

zen*_*hoy 11 c++ iterator language-lawyer

标题说明了一切.给定一个结束的迭代器,它可以在不调用未定义的行为的情况下递增零吗?

例证 - 以下代码是否可以将迭代器返回到指定的索引 - 或者end索引是否超出范围?

std::vector<Type>::iterator Class::fromIndex(size_t index) {
    return member_vector.begin() + std::min(index, member_vector.size());
}
Run Code Online (Sandbox Code Playgroud)

如果知道的行为std::advancestd::next不同的行为也很有趣,但在这里我特别感兴趣operator+.

Lig*_*ica 6

这是一个定义明确的无操作,比如我.

给定一个结束的迭代器,它可以在不调用未定义的行为的情况下递增零吗?[..]我特别感兴趣的是运营商+.

对于随机访问迭代器,表115下面[random.access.iterators]告诉我们(在"操作语义"下,并在"扩展"之后while给出循环的含义)(r += 0) ? r,即(.end() += 0) ? .end().

定义r + 0是根据这个定义给出的.

如果知道的行为std::advancestd::next不同的行为也很有趣.

对于其他所有内容,std::next都是根据其定义的std::advance,其中[iterator.operations]没有明确说明这是明确定义的,但从措辞来看似乎很明显,这符合英语语言中对"增量"/"减量"的定义:"增量(或减量为负n)迭代器参考in".

我们知道,在所有实际条件下,英语"增量"/"减量"为零是无操作的.