我正在学习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