vector :: reserve和内置类型

Dea*_*ean -3 c++ vector

如果没有整体阅读,请不要将其标记为重复.这不是"std :: reserve做什么"的问题.

使用内置类型写入vector :: reserve'd地址是错误的吗?

vector<int> vec;
vec.reserve(10);
vec[5] = 24; // Is this an error?
Run Code Online (Sandbox Code Playgroud)

我知道对象没有被初始化,但由于这些只是整数而空间是由保留分配的,而这是在连续存储中完成的,这是一个错误吗?

Ben*_*ley 7

根据标准,这是一个错误,因为它是未定义的行为.这可能不会导致任何可观察到的问题,但仍然是一个错误.某些实现将执行边界检查并在调试模式下抛出异常.他们可以这样做,并且完全符合标准,因为您调用了未定义的行为.