C++ mutable看这一篇就明白

本文介绍了C++中mutable关键字的使用方法及其应用场景。当需要在const成员函数中修改成员变量时,可以通过mutable关键字来实现,这使得即使在const上下文中也能改变特定成员变量的值而不破坏const特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C++ 类mutable看这一篇就明白

mutable:可改变的,可以

某些const函数内需要改变成员变量值值,但又要保持const属性,被const对象调用。故引入mutable。
用mutable修饰成员变量,成员变量永远处于修改状态,即便在const成员函数中。

class Time {

public:
	int hour;
	int minute;
	mutable int second;
public:
   	void noone() const{
		second = 12;//正确
		hour = 11;//报错
	};
};
### C++ 中 `mutable` 关键字的用法 在 C++ 中,`mutable` 是一种特殊的关键字,用于修饰类成员变量。当对象被声明为常量 (`const`) 时,默认情况下其所有成员函数和数据成员也被视为不可修改。然而,在某些场景下希望允许特定的数据成员即使在常量对象中也可以被改变,这时就可以使用 `mutable`。 #### 基本语法 ```cpp class MyClass { public: void setCounter() const; private: mutable int counter; // 即使对象是 const 类型, 这个成员仍然可变 }; ``` 上述代码定义了一个名为 `MyClass` 的类,其中有一个私有整数类型的成员变量 `counter` 被标记为了 `mutable`[^3]。 #### 使用示例 下面是一个具体的例子来展示如何利用 `mutable` 实现缓存机制: ```cpp #include <iostream> using namespace std; class ExpensiveComputation { public: double computeValue(int param) const { if (cachedParam != param || !isCached) { // 如果参数不同或未缓存,则重新计算 value = doExpensiveCalculation(param); cachedParam = param; isCached = true; } return value; } private: mutable bool isCached; // 可以在一个 const 成员函数内更改的状态标志位 mutable int cachedParam; // 缓存使用的参数 mutable double value; // 计算的结果 static double doExpensiveCalculation(int p){ cout << "Performing expensive calculation..." << endl; return sqrt(p); // 模拟耗时操作 }; }; int main(){ const ExpensiveComputation ec; cout << "First call:" << endl; cout << ec.computeValue(9); cout << "\nSecond call with same parameter:" << endl; cout << ec.computeValue(9); cout << "\nThird call with different parameter:" << endl; cout << ec.computeValue(16); return 0; } ``` 在这个程序里,尽管 `computeValue()` 方法本身是 `const` 函数,但是由于存在 `mutable` 定义的三个成员变量(`value`, `cachedParam`, 和 `isCached`),所以可以在不违反常量性的前提下调用该方法的同时更新这些字段的内容[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值