C ++错误:将“ const umap_int {aka const std :: unordered_map <int,int>}”作为“ this”参数传递会丢弃限定符[-fpermissive]

时间:2019-07-10 06:23:38

标签: c++ reference const return-value member-functions

我正在尝试通过一种方法来获取unordered_map映射值的常量引用。 unordered_map是一个类成员。但是,下面的代码不起作用,并引发标题中指出的错误。

我试图将const umap_int::mapped_type &更改为const int &,但该方法也不起作用。返回对简单数据类型(int,double,...)的变量的const引用的标准示例成功了。

#include <unordered_map>

using namespace std;

typedef unordered_map<int, int> umap_int;

class class_A{

    public:

    class_A(){
        for(int k=0; k<3;++k)
            M[k] = k;
    }

    const umap_int::mapped_type & get_M(int key) const{
        return M[key];
    }

    private:

    umap_int M;

};

int main(){

    class_A A;

    return 0;
}

1 个答案:

答案 0 :(得分:1)

在const方法内部,您只能调用M的const成员函数。两个unordered_map::operator[]重载都是非常量-reference。因此,您不能在const get_M中使用它。您可以从get_M签名中删除 const 限定符,或使用具有const重载的find,但是您需要处理传递的键不存在映射值的情况:

const umap_int::mapped_type & get_M(int key) const {
    //return M[key];
    auto it = M.find(key);
    if (it != M.end())
        return it->second;
    // do sth here ...
    // throw exception
    // make static variable with default value which will be accessed 
}