我不明白我得到的编译错误。下面是我的用例的简化示例。
#include <unordered_map>
#include <iostream>
#using namespace std;
struct C{
unordered_map<int, string> m;
C(){
m[1] = "one";
m[2] = "two";
}
int method() const{
const string s = m[2];
return 42;
}
};
int main() {
C c;
cout << c.method() << endl;
return 0;
}
以下是我的用例的要求:
method()
为const
,因为我确信它不会更改任何成员字段。m
应该是unordered_map
(或任何哈希表)。上述代码无法使用error: passing ‘const std::unordered_map<int, std::__cxx11::basic_string<char> >’ as ‘this’ argument discards qualifiers [-fpermissive]
进行编译。但是,如果我从方法const
中移除method()
(我不想或不能这样做),代码编译得很好。我不明白的是什么?在我的用例中没有办法制作方法const
吗?
顺便说一句,我在Ubuntu 15.10上使用GCC 5.2.1和CLion 1.2.4。
答案 0 :(得分:4)
std::unordered_map::operator[]
不是const
方法,因为它插入元素(如果不存在)。因此,您无法在常量m
上使用它。使用
std::unordered_map::at
代替。