函数参数前的const关键字是否还会阻止从中读取数据?

时间:2019-06-04 08:11:55

标签: c++ visual-studio stdmap

据我所知,函数参数前的const关键字承诺不会修改传入的数据(如果它是由ref传递的。)但是在这种情况下,在我看来,它阻止了读取数据。为什么会发生?

我试图将一些字符串映射到一些整数。并且有一些函数将映射(由const ref。)和字符串(由const ref)作为参数。但是,当我尝试执行以下操作时,这种方式不起作用:int val = my_map[str];

但是当我从参数中的映射之前删除const关键字时,这很好用。但是我不想复制整个地图。为什么在这种情况下const表现得很奇怪?

//当然,这不是实际的代码。但是错误被重现。

int get_val(const std::map<std::string, int>& map, const std::string& s) {
    return map[s];  // This doesn't compile
}

int main() {
    std::map <std::string, int> map;
    map["foo"] = 21;
    std::cout << get_val(map, "foo");
}

我希望输出为21。但我收到此错误:

Severity    Code    Description Project File    Line    Suppression State
Error   C2678    binary '[': no operator found which takes a left-hand operand of type 'const std::map<std::string,int,std::less<_Kty>,std::allocator<std::pair<const _Kty,_Ty>>>' (or there is no acceptable conversion)
        with
        [
            _Kty=std::string,
            _Ty=int
        ]   Delete  C:\Users\abusa\source\repos\Delete\Delete\Source.cpp    6

0 个答案:

没有答案