当前位置: 首页 > news >正文

【C++】011、mutable关键字

一、mutable作用

  • mutable的设计目的,是为了允许类成员变量在const成员成函数中被修改

二、mutable修饰的成员变量破坏了const成员函数的限制规则

const修饰的成员函数规则:

  • 不允许修改任何非静态成成员变量

  • 不允许调用其他非const成员函数

但mutable关键字破坏了第一个规则

  • 代码

class MyClass { private: int age; // 普通变量 mutable int cache; // mutable变量 public: void setAge(int a) const { // age = a; // ❌ 编译报错!const函数中不能修改普通成员 cache = a; // ✅ OK!mutable变量可以在const函数中修改 } };

三、mutable使用场景

1、惰性缓存

  • 使用const函数返回对象数据

  • 但是这个函数希望第一次读取时计算数据并进行缓存结果,后续直接返回缓存值

  • 则mutable修饰的成员变量,可满足上面的要求

  • 代码

class DataProcessor { private: std::string raw_data; mutable bool cache_valid; // 缓存是否有效(需在const中修改) mutable int cached_result; // 缓存的结果(需在const中修改) public: int getResult() const { // 逻辑上是只读函数,标记为const if (!cache_valid) { // 执行昂贵计算(如遍历大数据)... cached_result = raw_data.size() * 10; cache_valid = true; // ✅ 因为是mutable,所以可以在const函数中修改 } return cached_result; } };

2、使用mutable修饰的互斥锁对象,实现线程安全的const函数

  • 将互斥锁Mutex声明为mutable,让const函数能安全地加锁

  • 代码

#include <mutex> class ThreadSafeCounter { private: mutable std::mutex mtx; // 锁必须是mutable,因为const函数中需要上锁 int value = 0; public: int get() const { // 获取值,逻辑上只读 std::lock_guard<std::mutex> lock(mtx); // ✅ 调用 mtx.lock() 改变锁状态 return value; } };
http://www.jsqmd.com/news/1138834/

相关文章:

  • 高品质黑木耳形成的微气候协同模型——基于温度、温差、湿度、日照的多因子耦合分析
  • 企业AI落地第一步-智能问答!带你拆解一个能看懂图片的智能问答系统!
  • 别再熬夜攒论文!7款AI论文写作软件1天搞定全学科初稿
  • 60台真机具身智能实训:珠三角/长三角一周产线实战
  • 全程数据安全可控,构建合规化管理体系
  • 服务器被入侵、CPU异常飙升?挖矿木马入侵排查与完整清理方案
  • Chrome 与 Firefox WebGL 配置对比:4个关键参数与安全策略详解
  • 鸿蒙新特性:SwipeAction 滑动操作——构建任务收件箱与手势交互
  • 【Springboot毕设全套源码+文档】springboot基于人工智能的智能客服系统设计与实现(丰富项目+远程调试+讲解+定制)
  • 低代码平台构建PLM产品生命周期管理系统:从需求管理到退役回收的全流程实操指南
  • AI 辅助 Rust 单元测试:让模型先生成边界用例,再写测试函数
  • 基于RAG与Agent架构的垂直领域对话系统实战与避坑指南
  • 3个实用技巧:如何在OBS Studio中实现智能面部追踪直播
  • Seedance 2.0活体检测绕过原理与14种实测方法解析
  • 英文论文降AI用什么工具?Turnitin检测实测攻略
  • 芯邦CBM2099 APTool v7200 修复扩容U盘:从128G到32G的3步量产还原
  • GetQzonehistory:5分钟快速备份QQ空间全部历史说说的终极完整指南
  • 2026年莲湖区代理记账,财务管理就选良心企业
  • 如何高效使用Akebi-GC:原神游戏辅助工具完整实用指南
  • 演唱会科技演艺走红背后:机器人租赁,正在改写线下活动的创新边界
  • 公式化配置Canvas和panel,仅需公式化的三步让你的UI任何分辨率下都基本适配
  • 2026年AI生成电商短视频工具大全及收费标准:免费与高性价比带货软件深度横评
  • Linux命令-renice(修改进程优先级)
  • .vimrc配置
  • CFD边界速度与条件均值一致性分析:工程仿真校准核心
  • 【Springboot毕设全套源码+文档】基于springboot小学数学错题管理及推荐系统设计与实现(丰富项目+远程调试+讲解+定制)
  • 企业级AI数字员工选型推荐:从“功能堆砌”到“任务执行”的评估框架
  • 2025正品多维d3提高免疫力品牌榜 权威中立评选
  • nvm nodejs
  • Qwen3模拟ASR语义理解与代码生成实践指南