C++ error: passing 'const std::map<>]' discards qualifiers或pass-by-reference-to-const-map导致的“discards qualifiers”

产生问题的场景:

int func(const map<int, string> &aMap)  {
         string value = amap[0];  }

或者

int  Test::func()const

{

       string value = amap[0];                 //amap是Test类的成员函数.是就会产生传说中的null引用。

}

用g++编译上面的代码,会报……discards qualifiers。
       这里是原因


       简单来说,map的[]运算符会在索引项不存在的时候自动创建一个对象,有可能会改变map本身,所以不能够用在一个const map上。

解决办法有两个:


                  方法1、不要将形参声明为const
                  方法2、用find代替[]

                        不过第二中方法存在风险,因为end()->second是合法的,于

原文地址:https://www.cnblogs.com/wanghetao/p/3379590.html