mutable学习
来源:互联网 发布:手拉鸡专卖网淘宝付款 编辑:程序博客网 时间:2024/04/30 12:01
关键字mutable
1. mutalbe的中文意思是“可变的,易变的”,跟constant(既C++中的const)是反义词。
2. 在C++中,mutable也是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中。
3. 如果类的成员函数不会改变对象的状态,那么这个成员函数一般会声明成const的。但是,有些时候,我们需要在const的函数里面修改一些跟类状态无关的数据成员,那么这个数据成员就应该被mutable来修饰。
用法一:
例子:
class ClxTest
{
public:
void Output() const;
};
void ClxTest::Output() const
{
cout << "Output for test!" << endl;
}
void OutputTest(const ClxTest& lx)
{
lx.Output();
}
如果现在,我们要增添一个功能:计算每个对象的输出次数。如果用来计数的变量是普通的变量的话,那么在const成员函数Output里面是不能修改该变量的值的;而该变量跟对象的状态无关,所以应该为了修改该变量而去掉Output的const属性。这个时候,就该我们的mutable出场了——只要用mutalbe来修饰这个变量,所有问题就迎刃而解了。
修改过的代码:
class ClxTest
{
public:
ClxTest();
~ClxTest();
void Output() const;
int GetOutputTimes() const;
private:
mutable int m_iTimes;
};
ClxTest::ClxTest()
{
m_iTimes = 0;
}
ClxTest::~ClxTest()
{}
void ClxTest::Output() const
{
cout << "Output for test!" << endl;
m_iTimes++;
}
int ClxTest::GetOutputTimes() const
{
return m_iTimes;
}
void OutputTest(const ClxTest& lx)
{
cout << lx.GetOutputTimes() << endl;
lx.Output();
cout << lx.GetOutputTimes() << endl;
}
用法二:
struct A
{
int a;
mutable int b;
};
int main(int argc, char** argv)
{
const A object = {10,20};
object.b = 30;
cout << object.b << endl;
return 0;
}
面试题:
Please interpret the functionality of three "const" in the following method declaration:
const int* computeResult( const int& var ) const;
1> A function that returns a constant int pointer.
pointer to constants. The value that pointer point to can't be modified(*p can't be modified)
2> A function that accepts a constant pointer parameter
The parameter can't be modified in the function.
3> Constant member function. The member variables (non-constant and constant ) cann't be modified by the function. ( 但是可以访问非const变量,不能访问非const的函数 )
Const function must be a member function of a class
We may pass a non-constant object to a constant function, but we cannot pass a constant object to a non-constant function.
Constant function can invoke constant function only, can`t invoke non-constant function.
- mutable学习
- C++中mutable学习
- mutable
- mutable
- mutable
- mutable
- mutable
- mutable
- mutable
- mutable
- mutable
- mutable
- mutable
- C++中的static、const、mutable用法学习
- python学习之---mutable and immutable
- C++中mutable关键的学习
- const & mutable
- mutable.cpp
- 拷贝构造函数应用分析
- chmod命令详细用法
- 函数指针应用
- 东莞抢先物联网装备制造
- silverlight百叶窗
- mutable学习
- C#网络编程(同步传输字符串) - Part.2
- 自卑的程序员和愚蠢的管理者
- 第三方设备
- 同步Windows Mobile SIM卡短信
- C与C++社区混战,C#会重蹈覆辙吗?
- 开源界的5大开源许可协议
- C#会重蹈覆辙吗?系列之1:论C#性能不能承受之慢
- CentOS编译新内核时遇到的问题