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