Why does const does not works with size() for stl map, whereas it works perfectly for other containers ?
在处理一个难以整体描述/解释的问题时遇到的问题,因此这里是对该问题的相关再现。
在Windows上使用GNU G++编译此代码
1 2 3 4 | int recreate(const map <int , vector<string> > &bitFieldMap){ cout<<bitFieldMap[1].size(); } int main(){} |
给出了以下隐藏错误
In function 'int recreate(const std::map > >&)':
D:\playground\testit.cpp:12:21: error: passing 'const std::map > >' as 'this' argument of
'std::map<_Key, _Tp, _Compare, _Alloc>::mapped_type& std::map<_Key, _Tp, _Compare, _Alloc>::operator[](std::map<_Key, _Tp, _Compare, _Alloc>::key_type&&) [with _Key = int; _Tp = std::vector >; _Compare = std::less;
_Alloc = std::allocator > > >; std::map<_Key, _Tp, _Compare, _Alloc>::mapped_type = std::vector >; std::map<_Key, _Tp, _Compare, _Alloc>::key_type = int]' discards qualifiers [-fpermissive] cout<
然而,从重新创建函数中删除const之后,它工作得很好。
1 2 3 4 | int recreate( map <int , vector< string > > &bitFieldMap){ cout<< bitFieldMap[1].size() ; } int main(){} |
在我的理解中,当值保持不变时,我们使用const来向编译器发出一些优化的信号。现在,对象上使用的size()函数每次执行时都会更改一些值,或者某个事件在调用size()时会分配给map容器一些内存。
现在我的问题可以通过不在这里使用const或使用multipmap来解决。但为什么常量和大小会显示这种行为呢?
你不是在
然后你试图在那个位置打电话给
事实上,不是
Returns a reference to the value that is mapped to a key equivalent to key, performing an insertion if such key does not already exist.