std::Vector 越界访问没有错误
在 std::vector 中,使用operator[]访问不会触发错误报告,即使索引超出范围。这可能会导致意外结果。
考虑以下示例:
struct Element { std::vector<double> face; }; int main() { Element elm; // Insert 6 elements into elm.face for (int i = 0; i < 6; i++) elm.face.push_back(i); std::cout << elm.face.size() << std::endl; // Prints 6 std::cout << elm.face[6] << std::endl; // Prints an arbitrary number }
如图所示,向量大小为 6,但访问不存在的索引 elm.face[6] 会产生一个非- 错误响应。这个结果是未定义的行为,返回的值可能会因平台和内存管理而异。
相反,使用 at() 访问元素会执行边界检查,并在以下情况下抛出异常 (std::out_of_range):索引超出范围。因此,当需要进行边界检查时,建议使用at()而不是operator[]。
以上是为什么 `std::vector` 的 `operator[]` 允许越界访问而不会出错?的详细内容。更多信息请关注PHP中文网其他相关文章!