gpt4 book ai didi

c++ - std::vector reserve() 的未定义行为

转载 作者:搜寻专家 更新时间:2023-10-31 01:00:14 25 4
gpt4 key购买 nike

考虑以下代码:

vector<uint8_t> v(1);
v.reserve(2);
uint8_t *data = &v.front();
data[1] = 0;

是否存在未定义的行为(C++98、C++03、C++11)?
如果是,获取 RAII 缓冲区的最佳方法是什么(不使用 C++11)?

最佳答案

调用v.front() 是未定义行为每当v.empty()是真的。调用 v[n] 是未定义的行为除非n < v.size() .此外,保留内存中没有对象,因此您不能将内存视为对象。一个 vector 只保证

that [data(), data() + size()) is a valid range

并且不能保证有更大的有效范围。 (请注意 data() == &front() ,因此这适用于您的代码。)

关于c++ - std::vector reserve() 的未定义行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31516309/

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