我试图传递const与它的工作原理: 例如:
void damn(const vector <bool> &bb)
{
for (int i=0; i<bb.size(); i++)
cout<<bb[i]<<endl;
}
但是在尝试使用地图时,它不会:
void pas(const map <string, float> &mm)
{
cout<<mm["a"];
cout<<mm["b"];
}
我想知道为什么没有。
答案 0 :(得分:25)
map::operator[]
有点奇怪。它这样做:
第3步与const
不兼容。该语言不是让两个功能不同的operator[]
重载,而是强迫您对map::find
个对象使用const
。
或者,有人可能会说,如果参数不在地图中,map::operator[] const
会做什么?抛出异常?未定义的行为? (毕竟,这就是vector::operator[]
对索引超出界限所做的事情。)无论如何,只要给我们带来一点点不便就可以避免这个问题。
my_map.find(key)
,则 my_map.end()
会返回key
。
答案 1 :(得分:5)
std::map::operator[]
会插入默认构造的元素。这是why it is not a const member function。您可以使用std::map::find
代替,但请务必检查它返回的迭代器。
答案 2 :(得分:2)
我认为这是因为地图中的[]
不是const
,因为它创建了具有默认值的新对,如果你解决了不存在的问题。试试
void pas(const map <string, float> &mm)
{
cout<<mm.find("a")->second;
cout<<mm.find("b")->second;
}