【发布时间】:2010-05-02 05:37:04
【问题描述】:
我尝试用向量传递 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"];
}
我想知道为什么没有。
【问题讨论】:
-
以什么方式失败?你能通过从函数体中删除行来编译它吗,因为参数看起来是正确的。
-
编译器非常清楚出了什么问题:
const-map.cpp:9: error: passing ‘const std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, float, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, float> > >’ as ‘this’ argument of ‘_Tp& std::map<_Key, _Tp, _Compare, _Alloc>::operator[](const _Key&) [with _Key = std::basic_string<char, std::char_traits<char>, std::allocator<char> >, _Tp = float, _Compare = std::less<... Duh。 -
可怕的错误 :),尽管 Potatoswatter 在下面有正确的答案 - 你不能在 const 地图上调用 operator[]。
-
@Joey:有时如果错误消息不那么丰富会很好。 :-)