产生问题的场景:
int func(const map&aMap) { string value = amap[0]; }
或者
int Test::func()const { string value = amap[0]; //amap是Test类的成员函数. }
用g++编译上面的代码,会报……discards qualifiers。
这里是原因。
简单来说,map的[]运算符会在索引项不存在的时候自动创建一个对象,有可能会改变map本身,所以不能够用在一个const map上。
解决办法有两个:
- 方法1、不要将形参声明为const
- 方法2、用find代替[]
另外,也可以使用at成员函数
tmp = anot.at["jack"]; // 可以使用at成员方法来解决