我真的不明白我在下面做錯了什麼。我有一個名爲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是如何的,它可能是過度的。 –