#include <iostream>
using std::cout;
class Test
{
public:
int x;
mutable int y;
Test()
{
x = 4; y = 10;
}
static void disp(int);
};
void Test::disp(int a)
{
y=a;
cout<<y;
}
int main()
{
const Test t1;
Test::disp(30);
t1.y = 20;
cout << t1.y;
return 0;
}
我在构造函数中遇到错误:
void Test::disp(int a)
{
y=a;
cout<<y;
}
我不明白为什么这不起作用,因为y是可变的并且它已经在构造函数Test()中成功更新但是当它来到disp()时。它显示错误..
我还检查了其他一些例子。所以我才知道你只能更新一次可变变量。如果您尝试更新它一次,它会显示错误。任何人都可以解释为什么会发生这种情况或背后的原因吗?
答案 0 :(得分:1)
您的问题与mutable
没有任何关系。您正在尝试从静态方法修改非静态类成员,这是不允许的。在您的示例中,首先将Test::disp
方法设为静态毫无意义。
你似乎也误解了mutable
的含义。它不会使const对象的成员成为非只读对象。它使const方法可以写入成员。您的代码已更新,以显示mutable的作用:
#include <iostream>
using std::cout;
class Test
{
public:
int x;
mutable int y;
Test()
{
x = 4; y = 10;
}
void disp(int) const; // Notice the const
};
void Test::disp(int a) const
{
y=a; // ::disp can write to y because y is mutable
cout<<y;
}
int main()
{
Test t1;
t1.disp(30);
t1.y = 20;
cout << t1.y;
return 0;
}
是的,可变写变量的写入次数没有限制,只是为了清楚。