我有一个关于通过引用传递地图的问题。让我们考虑以下代码:
void doNotChangeParams(const map<int, int>& aMap){
if (aMap.find(0) != aMap.end()){
cout << "map[0] = " << aMap[0] << endl;
}
}
我正在使用地图 myMap 并拨打这样的电话: doNotChangeParams(myMap)
现在,我可以看到我没有修改函数内的参数 aMap 。然而,我的g ++编译器抱怨访问 aMap [0] 会丢弃限定符 const 。
我正在使用 const 因为我想告诉读者这个函数我没有修改参数。此外,当我不小心修改地图时,它有助于抛出编译错误。
目前,我必须删除 const ,我认为这会使读者从签名方法中弄清楚上述含义。我知道评论会做,但我想如果你知道任何“程序化”的方式,我会问。
谢谢,伙计们。
答案 0 :(得分:4)
[]
上的std::map
运算符是非常量的。这是因为如果找不到密钥,它将使用默认值添加密钥。所以你不能在const地图参考上使用它。请改用find
返回的迭代器:
typedef map<int, int> MyMapType;
void doNotChangeParams(const MyMapType& aMap){
MyMapType::const_iterator result = aMap.find(0);
if (result != aMap.end()){
cout << "map[0] = " << result->second << endl;
}
}