C++关键字:mutable

一、mutable

1.mutable修饰非静态的成员变量

1.mutable仅能修饰类中的非静态的成员变量。不能修饰全局变量、局部变量、静态变量、常量。
2.被mutable修饰的成员变量,可以在const成员函数中被修改。尤其是维护一些统计信息时,是希望可以在const成员函数中自增这些统计信息的,而不希望修改其他关键变量。
【被static修饰的静态成员变量,属于类不属于对象,也可以在const成员函数中被修改】

#include <iostream> 
#include <string>
using std::cout;
using std::string;

class Log
{
public:
    void print(const string & str) const
    {
        cout << str << "\n";
        printNums++;
        cout << printNums << "\n";
        printnums++;
        cout << printnums << "\n";
    }
private:  //被mutable修饰的成员变量,可以在const成员函数中被修改
    mutable int printNums = 0; 
    static int printnums;
};

int Log::printnums = 100;

int main()
{
    Log log;
    log.print("666");
    log.print("hello world");
    return 0;
}

2.mutable用于lambda表达式

mutable允许在捕获变量的副本上进行修改。默认情况下,lambda表达式中的捕获变量是const,使用 mutable 可以解除这种限制。

auto lambda = [count = 0]() mutable {
    count++; // 如果没有 mutable,捕获的 count 就是 const,无法修改
    std::cout << "Count: " << count << std::endl;
};
lambda(); // 输出: Count: 1
lambda(); // 输出: Count: 2

3.mutable不能修饰的变量:静态变量、const变量

被static、const修饰的变量,不能再用mutable修饰,是冲突的。

mutable仅能修饰类中的非静态的成员变量。不能修饰全局变量、局部变量、静态变量、常量。

'mutable' can only be applied to member variables
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员爱德华

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值