据我所知,函数参数前的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