C++ 中的 mutable 关键字

C++中的mutable关键字

在C++中,mutable是一个非常有用的关键字,它允许我们在一个const函数中修改某个成员变量。这在某些情况下非常有用,比如我们需要在const函数中改变某个被缓存的值,或者我们需要在const函数中改变某个用于统计的值。

mutable的基本用法

在C++中,我们可以使用mutable关键字来声明类的成员变量。这样,即使在一个const成员函数中,我们也可以修改这个mutable声明的成员变量。

下面是一个简单的例子:

class MyClass {
public:
    void setValue(int value) { m_value = value; }
    int getValue() const { 
        m_accessCount++;
        return m_value; 
    }
    int getAccessCount() const { return m_accessCount; }
private:
    int m_value;
    mutable int m_accessCount = 0;
};

在这个例子中,我们有一个getValue函数,它是一个const函数,这意味着在这个函数中我们不能修改任何成员变量。但是,由于我们将m_accessCount声明为mutable,所以我们可以在getValue函数中修改它。

Lambda 表达式中的 Mutable 关键字

在 C++ 的 Lambda 表达式中,Mutable 关键字提供了一种方式来修改通过值捕获的变量,而不改变原始变量的值。本文将探讨 Mutable 在 Lambda 中的应用,并通过一个简单的示例来说明其用法和作用。

让我们来看一个示例代码:

#include <iostream>
using namespace std;

int main() {
    int x = 10;
    auto f = [x]() mutable { x++; }; // 值捕获 x,并使用 mutable 修饰
    f(); // 修改 x 的拷贝
    std::cout << x << std::endl; // 输出 10,原始的 x 没有改变

    return 0;
}

在这个示例中,Lambda 表达式 [x]() mutable { x++; }; 捕获了变量 x 的值,然后在 Lambda 函数体内部将其递增。尽管在 Lambda 函数体内部修改了 x 的值,但这个修改只会影响到 Lambda 函数体内部的 x,不会影响到外部定义的 x

总结

总的来说,mutable是C++中一个非常有用的关键字,它可以让我们在const函数中修改成员变量。为我们提供了一种在 Lambda 函数体内部修改捕获变量的方式,同时保持了原始变量的值不变。但是,我们在使用它的时候也需要注意,不要滥用。

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

宁子希

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

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

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

打赏作者

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

抵扣说明:

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

余额充值