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::advance或std::next不同的行为也很有趣,但在这里我特别感兴趣operator+.
这是一个定义明确的无操作,比如我.
给定一个结束的迭代器,它可以在不调用未定义的行为的情况下递增零吗?[..]我特别感兴趣的是运营商
+.
对于随机访问迭代器,表115下面[random.access.iterators]告诉我们(在"操作语义"下,并在"扩展"之后while给出循环的含义)(r += 0) ? r,即(.end() += 0) ? .end().
定义r + 0是根据这个定义给出的.
如果知道的行为
std::advance或std::next不同的行为也很有趣.
对于其他所有内容,std::next都是根据其定义的std::advance,其中[iterator.operations]没有明确说明这是明确定义的,但从措辞来看似乎很明显,这符合英语语言中对"增量"/"减量"的定义:"增量(或减量为负n)迭代器参考i由n".
我们知道,在所有实际条件下,英语"增量"/"减量"为零是无操作的.
| 归档时间: |
|
| 查看次数: |
188 次 |
| 最近记录: |