繁体   English   中英

为什么为 const std::vector 定义了 operator[],而不为 const std::map 定义了 operator[]?

[英]Why is operator[] defined for const std::vector, but not for const std::map?

有这个代码:

#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 个 arrays - 一个用于键,第二个用于值。 而且我了解const map给了我const int作为值。 但是vector<vector<int>>也应该如此,因为通过[]访问元素也是const vector<int> ,但是是允许的。 此外,通过[]访问值并不立即意味着我要write数据。 我可以读取该值,那么为什么const map没有operator[] (当编译器不知道我想写还是读时)。

编辑

问题是语言设计,而不是标准引用。 如评论中一样 - >您需要 1 个运算符来编写 map operator[] 但需要 2 个运算符用于向量写入operator[]operator= 为什么map::operator[]会自动期望我想写? (因此通过提供的键创建新元素)? 我可以像在向量中一样只是尝试从 map 中读取,如果该密钥(对)不存在,它可以给出错误或警告,但无需立即创建它。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM