gpt4 book ai didi

c++ - 为什么为const std::vector定义了operator [],而没有为const std::map定义了operator []?

转载 作者:行者123 更新时间:2023-12-01 15:12:29 25 4
gpt4 key购买 nike

具有以下代码:

#include <map>
#include <string>
#include <vector>

void foo1(const std::map<std::string, int> &m)
{
m["abcd"];
}

void foo2(const std::vector<std::vector<int>> &v)
{
v[0];
}
仅给出 foo1的错误,而不给出 foo2的错误。据我了解 map->它有2个数组-一个用于键,第二个用于值。而且我知道 const map给了我 const int作为值。但是 vector<vector<int>>也应该这样,因为通过 []访问元素也是 const vector<int>,但是被允许。此外,通过 []访问值并不意味着我要对数据进行 write。我只能读取该值,所以为什么连 const map也没有 operator[]? (当编译器不知道我是否要写入或读取时)。
编辑
问题是针对语言设计,而不是标准报价。就像在注释->中一样,您需要1个运算符才能写在 map operator[]中。但是需要2个用于 vector 的运算符来写 operator[]operator=。为什么 map::operator[]自动期望我要写? (并因此通过提供的键创建新元素)?我可以像在vector中一样,只是尝试从该映射中读取数据,如果该key(pair)不存在,它可以给出错误或警告,但是不需要立即创建它。

最佳答案

这是因为如果不存在所引用的元素,则std::map::operator[]会插入到 map 中。因此,该方法不能声明为const,因此不能在const对象上调用。

关于c++ - 为什么为const std::vector定义了operator [],而没有为const std::map定义了operator []?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63163473/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com