码迷,mamicode.com
首页 > 其他好文 > 详细

关键字mutable

时间:2020-02-19 21:08:27      阅读:79      评论:0      收藏:0      [点我收藏+]

标签:return   报错   情况   编译报错   关键字   ret   参数   可变   必须   

1.突破 const 的限制

class Test {
public:
    Test() = default;
    Test(unsigned int times):times(times){
    }
    ~Test() = default;
    void printOut() const {
        cout << "out" << endl;
        times++; // 编译报错,const成员函数不能修改成员数据变量
    }
private:
    unsigned int times; // 用来记录输出操作一共被执行了多少次
};

mutable关键字可以突破const的限制。被mutable修饰的成员变量永远处于可变的状态,即使在const成员函数中也是。

但是有时候我们需要在const修改与类状态无关的数据成员,那么此时应该用mutable修饰。

class Test {
public:
    Test() = default;
    Test(unsigned int times):times(times){

    }
    ~Test() = default;
    void printOut() const {
        cout << "out" << endl;
        times++; // 编译通过,此时const成员函数也可以修改类数据成员
    }
private:
    mutable unsigned int times; // 这里加入关键字mutable
};

 

2.可变lambda

默认情况下,对于一个值被拷贝的lambda表达式,是不会改变其捕获的值的。如果我们需要改变一个被捕获变量的值,就必须在参数列表首加mutable,因此可变lambda能省略参数列表。

void fun3()
{
    int sz = 4;
    auto f = [sz]() {return --sz; };  //编译错误: 不可以改变值捕获的变量 
    f();
}
void fun3()
{
    int sz = 4;
    auto f = [sz]() mutable {return --sz; };  // 参数列表首加了mutable,则可以改变值捕获的变量 
    f();
}

 

关键字mutable

标签:return   报错   情况   编译报错   关键字   ret   参数   可变   必须   

原文地址:https://www.cnblogs.com/qiang-wei/p/12332828.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!