向量检查超出堆数组的向量是否更严格?

Fak*_*ken 7 c++ arrays vector

与堆数组相比,向量的边界检查有多严格?它究竟是如何检查边界的,以及如何与堆数组进行比较?

GMa*_*ckG 18

vector如果使用该at()函数,A 将执行边界检查,例如:

std::vector<int> v(5);
v.at(3) = 10; 
v.at(5) = 20; // throws an exception, std::out_of_range
Run Code Online (Sandbox Code Playgroud)

但是,如果使用operator[],则没有边界检查.(访问不存在的元素会导致未定义的行为.)

但应该注意的是,大多数实现都有可能在所有迭代器上包含边界检查,这将在这里的答案中讨论.默认情况下,VS2008及以下版本在Debug和Release中启用,VS2010仅在Debug中启用.gcc要求您定义_GLIBCXX_DEBUG以获取已检查的迭代器.