我正在學習C++,我讀到:如果一個數據成員被聲明爲mutable,那麼從const成員函數中爲這個數據成員賦值是合法的。 但下面的代碼編譯沒有任何錯誤或由gcc警告。 (這是不是一個真實世界的代碼示例中,我只是寫它來測試可變關鍵字)由非const成員函數改變的可變變量
class M
{
public:
M(){x=10;};
int getX() {x++; return x;};
private:
mutable int x;
};
int main()
{
M xx;
std::cout << xx.getX() << std::endl;
}
我不應該申報的getX爲const?
編輯1(永遠的答案,使事情變得更加清晰),下面的代碼不會被編譯:
class M
{
public:
M(){x=10;};
int getX() const {x++; return x;};
private:
int x;
};
int main()
{
M xx;
std::cout << xx.getX() << std::endl;
}
該聲明並沒有說成員函數**必須是const。我建議在學習'mutable'之前學習和理解'const'。 – 2013-04-25 05:01:55
通常情況下,const函數中允許的任何內容也允許在非const函數中使用。 Const函數比非const函數更具限制性。 – Spook 2013-04-25 05:09:15
我的意思是沒有冒犯,但你如何評價你的英語理解?這裏的問題似乎是你對這句話的含義有一個基本的誤解。 – 2013-04-25 05:18:06