首页 >后端开发 >C++ >Const std::map 访问:'operator[]”与'at()”——您应该使用哪个?

Const std::map 访问:'operator[]”与'at()”——您应该使用哪个?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-03 17:26:14336浏览

Const std::map Access: `operator[]` vs. `at()` – Which Should You Use?

使用 Operator[] 与 at() 访问 Const 映射中的元素

使用常量 std::map 时,访问使用运算符[] 的元素可能会出现问题。虽然使用此方法看起来很直观,但它无法编译。这是因为如果键不存在,operator[] 期望一个非常量映射来修改映射。

但是,还有一种替代方法 at(),它是在 C 11 中专门引入的这个目的。与 operator[] 不同,如果键不存在,at() 会抛出 std::out_of_range 异常,而不是插入默认构造的元素。

这种行为与常量映射的概念非常吻合。通过定义 at() 的 const 重载,它允许安全有效地访问元素,而不会出现无意的修改。

为了说明这一点,请考虑以下示例:

#include <iostream>
#include <map>

int main()
{
    std::map<int, char> A;
    A[1] = 'b';
    A[3] = 'c';

    const std::map<int, char> B = A;

    std::cout << B.at(3) << std::endl; // works
    std::cout << B[3] << std::endl;    // cannot access (compile error)
}

在在这种情况下,在 B 上使用 operator[] 会导致编译时错误,因为它是 const 映射并且无法修改。然而,at() 方法可以完美地工作,因为它知道映射的 const 性质,并且如果键不存在则抛出异常。

因此,为了访问 const std::map 中的元素, at() 是推荐的、更安全的方法,可以防止意外修改。有关此功能的更多信息可以在 C 11 标准或与 std::map 类相关的文档中找到。

以上是Const std::map 访问:'operator[]”与'at()”——您应该使用哪个?的详细内容。更多信息请关注PHP中文网其他相关文章!

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