C++ map容器在const修饰下将无法使用“[]“来获取键值

参考博客:https://blog.csdn.net/benobug/article/details/104903314

编写程序时无意中发现使用const修饰的map容器变量无法使用重载的[]运算符来获取相应的键值.

const map<string, int> m;
m["1"] x
m.at("1") ok

此时访问需要用at。

对于const的对象使用了非const的成员函数:std::map::[]本身不是const成员函数(操作符),对于不在map中的关键字,使用下标操作符会创建新的条目,改变了map

解决方法是使用at成员函数

测试代码:

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

using namespace std;

int main() {

    map<string, int> m;

    m["1"] = 1;

    const map<string, int>& m2 = m;

    // 错误的访问方式
    // cout<<m2["1"]<<endl;

    // 正确的访问方式
    cout<<m2.at("1")<<endl;

    return 0;
}
文章目录