这是简单的demo
int func(const map<int, string> &aMap) { const string &aString = aMap[0]; ... }
用g++编译上面的代码,会报……discards qualifiers。
这里是原因。
简单来说,map的[]运算符会在索引项不存在的时候自动创建一个对象,
有可能会改变map本身,所以不能够用在一个const map上。
解决办法有两个:
- 不要将形参声明为const
- 用find代替[]
不过第二中方法存在风险,因为end()->second是合法的,于是就会产生传说中的null引用。
近期评论