我真的不明白我在下面做错了什么。我有一个名为Settings的类,其结构如下所示,以及下面列出的两个函数。我遇到的问题是在重载函数中重载const运算符[]时,将const修饰符放在哪里。我需要在某处使用const_cast吗?我错过了什么?重载const操作符时使用const_iterator []
class Settings
{
map<string, string> settingsMap;
map<string, string>::const_iterator itc;
const string getValue(string) const;
public:
const string operator[](string) const;
};
const string Settings::operator[](string K) const
{
return getValue(K);
}
const string Settings::getValue(const string K) const
{
const map<string, string> m = settingsMap;
itc = m.begin();
while(itc != m.end())
{
if(itc->first==K)
return itc->second;
itc++;
}
return 0;
}
在此先感谢。
如果还有什么需要知道解决这个问题,请告诉我。这只是我写的一些练习代码,希望能够在C++中取得更好的效果。 – user962472
由于您按值返回字符串,因此没有必要返回const字符串。返回引用时,您需要const。声明整个函数为const就够了。 –
我喜欢Google C++风格指南的建议:不要因为const而发疯。类似于const int * const * const x;即使它准确地描述了const x是如何的,它可能是过度的。 –