首页 >后端开发 >C++ >常量映射访问:为什么使用 `at()` 而不是 `operator[]`?

常量映射访问:为什么使用 `at()` 而不是 `operator[]`?

DDD
DDD原创
2024-12-04 09:30:12123浏览

Const Map Access: Why Use `at()` Instead of `operator[]`?

访问常量映射中的元素:运算符[]与at()

使用常量映射时,使用运算符[访问元素] 可能会失败。然而,使用 at() 是一个可行的替代方案。为什么会出现这种情况?

在非常量映射中,operator[] 执行两个功能:

  • 如果键存在,则返回对关联值的引用。
  • 如果键不存在,它会构造一个与该键关联的默认构造值并返回对

但是,在 const 映射中,operator[] 不允许修改底层数据结构。因此,它只能执行第一个函数,并在尝试使用第二个函数插入新元素时抛出错误。

相反,at() 是 C 11 中引入的一种方法,专门用于访问 a 中的元素。常量映射。它提供了几个好处:

  • 如果键不存在,它会抛出 std::out_of_range 异常,使其与向量和双端队列等其他容器一致。
  • 它有一个const 重载,允许在 const 映射上使用它。

出于这些原因,at() 是访问元素的推荐方法一个 const std::map。示例代码:

#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; // it works
    std::cout << B[3] << std::endl;    // it does not work
}

将输出:

c
error: can't access elements with operator[] in a const std::map

以上是常量映射访问:为什么使用 `at()` 而不是 `operator[]`?的详细内容。更多信息请关注PHP中文网其他相关文章!

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