十二 21

这是简单的demo

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

用g++编译上面的代码,会报……discards qualifiers。
这里是原因
简单来说,map的[]运算符会在索引项不存在的时候自动创建一个对象,
有可能会改变map本身,所以不能够用在一个const map上。

解决办法有两个:

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

不过第二中方法存在风险,因为end()->second是合法的,于是就会产生传说中的null引用。

Tagged with:
preload preload preload

无觅相关文章插件,快速提升流量