产生问题的场景:
int func(const map<int, string> &aMap)
{
string value = amap[0];
}
或者
int Test::func()const
{
string value = amap[0]; //amap是Test类的成员函数.
}
用g++编译上面的代码,会报……discards qualifiers。
这里是原因。
简单来说,map的[]运算符会在索引项不存在的时候自动创建一个对象,有可能会改变map本身,所以不能够用在一个const map上。
解决办法有两个:
- 方法1、不要将形参声明为const
- 方法2、用find代替[]
另外,也可以使用at成员函数
tmp = anot.at["jack"]; // 可以使用at成员方法来解决
本文探讨了在C++中使用const map时遇到的编译错误‘discards qualifiers’的原因。当尝试在const map上调用[]运算符时,由于该运算符可能修改map,因此会导致错误。解决方案包括避免使用const参数或改用find或at方法。了解这些最佳实践对于确保常量正确性和代码安全性至关重要。
1143

被折叠的 条评论
为什么被折叠?



