我试图传递const与矢量它的工作原理:例如:
void damn(const vector <bool> &bb)
{
for (int i=0; i<bb.size(); i++)
cout<<bb[i]<<endl;
}
Run Code Online (Sandbox Code Playgroud)
但是在尝试使用地图时,它不会:
void pas(const map <string, float> &mm)
{
cout<<mm["a"];
cout<<mm["b"];
}
Run Code Online (Sandbox Code Playgroud)
我想知道为什么不这样做.
Pot*_*ter 25
map::operator[]
有点奇怪.它这样做:
第3步与const
ness 不相容.不是有两个不同的运作operator[]
超载,语言强迫你使用map::find
的const
对象.
或者,人们可以争辩说,map::operator[] const
如果论证不在地图中会怎么办?抛出异常?未定义的行为?(毕竟,这就是vector::operator[]
索引超出范围的原因.)无论如何,只要给我们带来一点点不便,就可以避免问题.
my_map.find(key)
my_map.end()
如果key
找不到则返回.
我相信这是因为[]
in map isn't const
,因为如果您寻址到不存在的一对,它会创建具有默认值的新对。尝试
void pas(const map <string, float> &mm)
{
cout<<mm.find("a")->second;
cout<<mm.find("b")->second;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2330 次 |
最近记录: |