首页 >后端开发 >C++ >为什么 `std::vector` 的 `operator[]` 允许越界访问而不会出错?

为什么 `std::vector` 的 `operator[]` 允许越界访问而不会出错?

Barbara Streisand
Barbara Streisand原创
2024-12-07 11:06:13895浏览

Why Does `std::vector`'s `operator[]` Allow Out-of-Bounds Access Without Error?

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn