MSDN:
mutable member-variable-declaration:
This keyword can only be applied to non-static and non-const data members of a class. If a data member is declared mutable, then it is legal to assign a value to this data member from a const member function.
#include
<
iostream
>
#include < iomanip >
using namespace std;
class C
{
public :
C( int i):m_Count(i){}
int incr() const // 注意这里的const
{
return ++ m_Count;
}
int decr() const
{
return -- m_Count;
}
private :
mutable int m_Count; // 你可以试着将这里的mutable去掉再编译试试
};
void main()
{
C c1( 0 ),c2( 10 );
for ( int tmp,i = 0 ;i < 10 ;i ++ )
{
tmp = c1.incr();
cout << setw(tmp) << setfill( ' ' ) << tmp << endl;
tmp = c2.decr();
cout << setw(tmp) << setfill( ' ' ) << tmp << endl;
}
}
#include < iomanip >
using namespace std;
class C
{
public :
C( int i):m_Count(i){}
int incr() const // 注意这里的const
{
return ++ m_Count;
}
int decr() const
{
return -- m_Count;
}
private :
mutable int m_Count; // 你可以试着将这里的mutable去掉再编译试试
};
void main()
{
C c1( 0 ),c2( 10 );
for ( int tmp,i = 0 ;i < 10 ;i ++ )
{
tmp = c1.incr();
cout << setw(tmp) << setfill( ' ' ) << tmp << endl;
tmp = c2.decr();
cout << setw(tmp) << setfill( ' ' ) << tmp << endl;
}
}
输出结果:
1
9
2
8
3
7
4
6
5
5
6
4
7
3
8
2
9
1
10
0
结论:类里面的数据成员,加上mutable后,修饰为 const的成员函数就可以修改它!