我有一个关于通过引用传递 map 的问题。让我们考虑以下代码:
void doNotChangeParams(const map<int, int>& aMap){
if (aMap.find(0) != aMap.end()){
cout << "map[0] = " << aMap[0] << endl;
}
}
我正在 map myMap上进行如下调用:doNotChangeParams(myMap)
现在,可以看出我没有在函数内部修改参数aMap。但是,我的g++编译器抱怨访问aMap [0]放弃了限定符const。
我放置const是因为我想都告诉这个函数的读者我没有修改参数。此外,当我不小心修改 map 时,它还有助于引发编译错误。
目前,我必须删除const,我认为从方法的签名中读者无法清楚了解上面的含义。我知道可以发表评论,但我想我只是想问一问,以防您知道任何“编程”方式。
谢谢你们。
最佳答案
[]
上的std::map
运算符是非常量的。这是因为如果找不到密钥,它将为密钥添加一个默认值。因此,您不能在const map引用上使用它。请使用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;
}
}