1.提起mutable,不得不说的是const,这里就先简单介绍一下const的一个简单用法
<pre name="code" class="cpp"><span style="font-size:18px;">#include "dialog.h"
#include <QApplication>
#include<windows.h>
#include<iostream>
using namespace std;
class A
{
public:
int x;
int y;
int z;
Dialog d;
void mymove()const
{
for(int i=0;i<5;i++)
{
x=i*100;// 在这里,x不能被赋值
y=i*100;//</span><span style="font-size:18px;">
d.move(x,y);//成员变量d也不允许调用相关函数
d.show();//
Sleep(2000);
}
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
A *p(new A{0,0});
p->d.resize(200,200);
p->mymove();
Sleep(3000);
delete p;
return a.exec();
}
</span>
这是QT下的一个小程序,在class A中有一个被const修饰的成员函数mymove,由于成员函数被const修饰,所以mymove不能实现对类成员变量修改的功能,所以就不能实现窗口的移动。
<span style="font-size:18px;">
</span>
<span style="font-size:18px;">
</span>
<span style="font-size:18px;">2.,但是某些时候我们会需要改变某些成员变量的数据,这时,mutable派上了用处,被mutable修饰的成员变量允许被const修饰的成员函数修改</span>
<span style="font-size:18px;">
</span>
<span style="font-size:18px;"></span><pre name="code" class="cpp">#include "dialog.h"
#include <QApplication>
#include<windows.h>
#include<iostream>
using namespace std;
class A
{
public:
mutable int x;//被mutable修饰
mutable int y;//
int z;
mutable Dialog d;//
void mymove()const
{
for(int i=0;i<5;i++)
{
x=i*100;//可以被赋值
y=i*100;//
d.move(x,y);//可以调用
d.show();//
Sleep(2000);
}
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
A *p(new A{0,0});
p->d.resize(200,200);
p->mymove();
Sleep(3000);
delete p;
return a.exec();
}
这个时候程序便能正确的执行。