(c++)【mutable关键字】

在c++中,如果成员函数被const关键字修饰,那么调用这个成员函数将不会改变对象的任何状态(任何成员变量的值)。

但是如果我们需要在const修饰的函数里面修改一些成员变量,那么这个成员变量可以使用mutalbe来修饰。这样的话,这个变量就可以突破const的限制,在被const修饰的函数里面也能被修改。

例子如下:

#include <QCoreApplication>
#include "iostream"
using namespace std;

class Test
{
public:
    Test();
    ~Test();
    void Print() const; //const成员函数
    int PrintTimes() const; //const成员函数
private:
    mutable int ptimes; //mutable 意为:可变的
};

Test::Test()
{
    ptimes = 0;
}
Test::~Test()
{

}
void Test::Print() const
{
    cout << "This is a test message!" << endl;
    ptimes++;
}
int Test::PrintTimes() const
{
    return ptimes;
}

void myTest(Test const* ClassPointer) //对指针的常量引用
{
  cout << ClassPointer->PrintTimes() << endl;
  ClassPointer->Print();
  cout << ClassPointer->PrintTimes() << endl;
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    Test* test=new Test;
    myTest(test);
    return a.exec();
}

运行结果:在const 成员函数中成功改变了对象的状态。

在这里插入图片描述

若去掉 mutable int ptimes 前的 mutable 关键字

编译器报错:在函数void Test::Print() const中 ,ptimes为只读

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值