类中的可变变量 - 问题

时间:2015-03-24 18:34:09

标签: c++ mutable

#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()时。它显示错误..

我还检查了其他一些例子。所以我才知道你只能更新一次可变变量。如果您尝试更新它一次,它会显示错误。任何人都可以解释为什么会发生这种情况或背后的原因吗?

1 个答案:

答案 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;
}

是的,可变写变量的写入次数没有限制,只是为了清楚。