gpt4 book ai didi

c++ - 标准引用 : Does an out of range call to `vector::operator[]` invoke Undefined Behavior?

转载 作者:太空狗 更新时间:2023-10-29 23:33:18 27 4
gpt4 key购买 nike

考虑:

#include <vector>

int main()
{
std::vector <int> v;
v.reserve (100);
v[1] = 42;
}

我知道上面的代码调用了未定义的行为,因为在 v[1] 的调用点, vector 的大小根据 v.size() 是 < 1。(它是零。)

不过,我花了大约一个小时的时间浏览 C++ 标准,寻找直接或间接阐明这实际上是未定义行为的引文。

也许我错过了显而易见的事情。您能否至少提供 C++03 和可选的 C++11 标准的引文或引文来澄清这一点?

最佳答案

它是 operator[] 定义方式的产物。在 §23.2.3 [sequence.rqmts] 表 101 中,operator[] 的操作语义定义为 *(a.begin() + n)。所以它是根据迭代器定义的。根据 §24.2.1/5 [iterator.requirements.general],递增 begin 超过 end 并取消引用它是未定义的行为。

关于c++ - 标准引用 : Does an out of range call to `vector::operator[]` invoke Undefined Behavior?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17731133/

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