mutable的中文意思是“可变的,易变的”,跟关键字const是反义词。
在C++中,mutable也是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中。
我们知道,如果类的成员函数不会改变对象的状态,那么这个成员函数一般会声明成const的。我们知道,被const关键字修饰的函数的一个重要作用就是为了能够保护类中的成员变量。即:该函数可以使用类中的所有成员变量,但是不能修改他们的值。然而,在某些特殊情况下,我们还是需要在const函数中修改类的某些成员变量,因为要修改的成员变量与类本身并无多少关系,即使修改了也不会对类造成多少影响。当然,你可以说,你可以去掉该函数的const关键字呀!但问题是,我只想修改某个成员变量,其余成员变量仍然希望被const保护。那么这个数据成员就应该被mutalbe来修饰。
下面是一个小例子:
#include<iostream>
using namespace std;
class Test
{
public:
Test();
void show() const ;
private:
int a;
};
Test::Test()
{
a = 1024;
}
void Test::show() const
{
cout << "a=" << a << endl;
}
类Test的成员函数show是用来输出变量值的,不能修改变量值,所以声明为const的。
如果我们现在要添加一个功能:用来计算输出每个对象的次数,最简单的方法是增加一个变量T在show函数中进行加一操作,但是const成员函数是不能修改变量的值;而变量T跟对象的状态无关,这个时候使用mutable关键字修饰变量T,问题就迎刃而解了。如下列代码所示:
#include<iostream>
using namespace std;
class Test
{
public:
Test();
void show() const ;
private:
int a;
mutable int T;
};
Test::Test()
{
a = 1024;
T = 0;
}
void Test::show() const
{
cout << "a=" << a << endl;
T++;
}
变量 T被mutable修饰之后,它就可以突破const的限制,在被const修饰的函数里,也可以被修改。
本文详细解释了C++中mutable关键字的作用及用法,通过示例展示了如何在const成员函数中修改特定变量。

1200

被折叠的 条评论
为什么被折叠?



