访问成员 unordered_map 中的数据时,结构中的 C++ const 方法编译错误
C++ const method compile error in struct when accessing data in member unordered_map
我不明白我遇到的编译错误。下面是我的用例的一个简化示例。
#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
(或任何散列 table)。
以上代码无法通过 error: passing ‘const std::unordered_map<int, std::__cxx11::basic_string<char> >’ as ‘this’ argument discards qualifiers [-fpermissive]
编译。但是,如果我从方法 method()
中删除 const
(我不想或不能这样做),代码编译正常。我不明白什么?有没有办法在我的用例中制作方法 const
?
顺便说一下,我在 Ubuntu 15.10.
上使用 GCC 5.2.1 和 CLion 1.2.4
std::unordered_map::operator[]
不是 const
方法,因为它会插入不存在的元素。所以你不能在常量 m
上使用它。使用
std::unordered_map::at
相反。
我不明白我遇到的编译错误。下面是我的用例的一个简化示例。
#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
(或任何散列 table)。
以上代码无法通过 error: passing ‘const std::unordered_map<int, std::__cxx11::basic_string<char> >’ as ‘this’ argument discards qualifiers [-fpermissive]
编译。但是,如果我从方法 method()
中删除 const
(我不想或不能这样做),代码编译正常。我不明白什么?有没有办法在我的用例中制作方法 const
?
顺便说一下,我在 Ubuntu 15.10.
上使用 GCC 5.2.1 和 CLion 1.2.4std::unordered_map::operator[]
不是 const
方法,因为它会插入不存在的元素。所以你不能在常量 m
上使用它。使用
std::unordered_map::at
相反。