C ++:pass-by-reference和const关键字

时间:2010-07-23 03:32:31

标签: c++ pass-by-reference

我有一个关于通过引用传递地图的问题。让我们考虑以下代码:

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 ,我认为这会使读者从签名方法中弄清楚上述含义。我知道评论会做,但我想如果你知道任何“程序化”的方式,我会问。

谢谢,伙计们。

1 个答案:

答案 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;
    }
}