我有一个关于通过引用传递 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;
    }
}

09-06 14:42