gpt4 book ai didi

c++ - 类中的可变变量——问题

转载 作者:行者123 更新时间:2023-11-28 06:21:27 25 4
gpt4 key购买 nike

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

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

最佳答案

您的问题与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;
}

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

关于c++ - 类中的可变变量——问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29240278/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com