我希望这个问题在没有看到代码的情况下是可以回答的,因为我很不清楚问题出在哪里。我在 Boost 无序映射上使用 operator[]
来查找键并返回它映射到的 vector 。这是在赋值语句的 RHS 上,但我得到的错误似乎暗示 operator[]
不保证常量。我刚刚开始尝试学习 const
- 正确性。有人可以解码这个错误并指导我找出问题所在吗?或者询问更多详情?
编译器是 Apple LLVM version 4.2 (clang-425.0.28)
Block.cpp:89:39: error: no viable overloaded operator[] for type 'const Record_map' (aka 'const unordered_map<Typecode, FV_pair_vec>')
FV_pair_vec const fv_vec = records[rec_type];
~~~~~~~^~~~~~~~~
/usr/local/include/boost/unordered/unordered_map.hpp:420:22: note: candidate function not viable: 'this' argument has type 'const Record_map'
(aka 'const unordered_map<Typecode, FV_pair_vec>'), but method is not marked const
mapped_type& operator[](const key_type&);
^
最佳答案
问题在于所讨论的运算符不是const
,也就是说,它不能在const
对象上调用,也不能通过const
引用。确实提供 const
版本的替代方案是 at(key_type const&)
,如果具有该键元素的元素不在映射中,它将引发异常。所以你可以使用
mapped_type x = theMap.at(theKey);
代替
mapped_type x = theMap[theKey];
否则,使用 unordered_map::find(key_type const&)
方法。
关于C++ const-ness,Boost 无序映射,operator[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17505367/