gpt4 book ai didi

c++ - 结束的随机访问迭代器可以递增零吗?

转载 作者:可可西里 更新时间:2023-11-01 15:22:46 25 4
gpt4 key购买 nike

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

恰当的例子 - 如果索引超出范围,以下代码是否可以将迭代器返回到指定的索引 - 或者 end

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

如果 std::advancestd::next 的行为不同,那也很有趣,但在这里我特别感兴趣的是 运算符+

最佳答案

这是一个定义明确的空操作,我说。

Given an iterator to end, may it be incremented by zero without invoking undefined behavior? [..] I am interested specifically in operator+.

对于随机访问迭代器,[random.access.iterators] 下的表 115 告诉我们(在 “Operational Semantics” 下,并在“扩展”了while loop there given) that (r += 0) ≡ r, 所以 (.end() += 0) ≡ .end().

r + 0 的定义是根据它给出的。

If the behavior for std::advance or std::next are different that would be interesting to know as well.

对于其他所有内容,std::next 是根据 std::advance 定义的,而在 [iterator.operations] 中不没有明确地说这是定义明确的,但从措辞上看似乎很明显,它遵从“增量”/“减量”的英语定义:“增量(或负数的减量n ) n 的迭代器引用 i

我们知道英语“递增”/“递减”为零在所有实际术语中都是空操作。

关于c++ - 结束的随机访问迭代器可以递增零吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37009262/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com