我的map
定义如下:
typedef std::map<AsnIdentifier, AsnValue, AsnComparator> MibMap;
我有一个这样的映射,我想将其传递给另一个函数,使得传递给它的函数不能修改它。
void someFunc() {
MibMap someMap = GetMibMap();
otherFunc(someMap);
}
[otherFunc
的签名对于不变性可以如下:
void otherFunc(const MibMap& someMap);
但是只要使用地图的find
函数,我会得到一个非常冗长的编译错误。
void otherFunc(const MibMap& someMap) {
MibMap::iterator findVal = someMap.find(//pass the key to find); //this does not compile
}
我从方法签名中删除const
后,编译错误就消失了。是什么原因呢?我想保持地图不可修改,但同时我不确定该编译错误。
Edit:编译错误如下:
no suitable user-defined conversion from "std::_Tree_const_iterator... (and a whole long list)
[如果查看合适的reference documentation for std::map::find
,您将看到它具有两个重载,其不同之处在于1.隐式std::map::find
参数的const限定,以及2.返回类型:
this
从这里开始,您的问题应该很明显:您要调用iterator find( const Key& key );
const_iterator find( const Key& key ) const;
限定的const
,但是您正在尝试将其结果转换为find
。将MibMap::iterator
的类型更改为findVal
(或仅使用const_iterator
),它将起作用。