由const修饰的成员函数是只读成员函数,表明这个函数不会对这个类对象的数据成员(准确地说是非静态数据成员)作任何改变。
有 const 修饰的成员函数(指 const 放在函数参数表的后面,而不是在函数前面或者参数表内),只能读取数据成员,不能改变数据成员;没有 const 修饰的成员函数,对数据成员则是可读可写的。
例1:
#include <iostream>
using namespace std;
class A{
public:
A();
~A();
void output()const;
private:
int n;
};
A::A():n(0){};
A::~A(){};
void A::output()const
{
cout<<n<<endl;
}
int main()
{
A a;
a.output();
return 0;
}
2.mutalbe的中文意思是“可变的,易变的”,跟constant(既C++中的const)是反义词。在C++中,mutable也是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中。
#include <iostream>
using namespace std;
class A{
public:
A();
~A();
void output()const;//1.const成员函数
private:
mutable int n;//3.加上mutable就可以编译通过
};
A::A():n(0){};
A::~A(){};
void A::output()const
{
n=n+2; //2.对成员数据n改变
cout<<n<<endl;
}
int main()
{
A a;
a.output();
return 0;
}