首页 > 编程语言 >【C++ mutable使用】

【C++ mutable使用】

时间:2023-12-08 21:05:50浏览次数:27  
标签:const 函数 cachedValue C++ 使用 mutable 成员 cacheValid

什么是mutable关键字?

mutable被用于修饰类的成员变量。当一个成员变量被声明为mutable时,它允许在const成员函数内部被修改,即使对象本身是常量。

为什么使用mutable?

  1. 缓存数据: 在对象内部维护一个缓存,但不希望影响对象的常量性质时,可以使用mutable来标记缓存变量。

  2. 记录状态信息: 在const成员函数内部记录对象的某些状态信息,而不想破坏对象的常量性。

  3. 线程安全性: 在const成员函数内部修改某些成员变量以确保线程安全。

mutable的示例

class MyCache {
public:
    int GetCachedValue() const {
        if (!cacheValid) {
            // 计算缓存值,并将其存储在cachedValue中
            cachedValue = CalculateValue();
            cacheValid = true;
        }
        return cachedValue;
    }

private:
    mutable bool cacheValid = false; // 声明为mutable,允许在const函数内修改
    mutable int cachedValue = 0; // 声明为mutable,允许在const函数内修改

    int CalculateValue() const {
        // 计算值的复杂逻辑
        return 42;
    }
};

在上面的示例中,cacheValidcachedValue都被声明为mutable。即使在GetCachedValue这个const成员函数内部,我们也可以修改这两个成员变量。

标签:const,函数,cachedValue,C++,使用,mutable,成员,cacheValid
From: https://blog.51cto.com/u_16202095/8741550

相关文章

  • c++ 程序的内存分配
    C++程序在执行时,将内存大致分为以下几个区域:栈:系统自动分配的空间,只要不特殊声明,就定义在栈区,函数的区域也在栈上。栈是向下增长的。(const在栈里)堆:使用动态内存分配的方式可以申请堆空间,用完要手动释放。newmalloc全局区:全局变量、静态变量(static),生命周期是程序整个运行过......
  • C/C++ 实现动态资源文件释放
    当我们开发Windows应用程序时,通常会涉及到使用资源(Resource)的情况。资源可以包括图标、位图、字符串等,它们以二进制形式嵌入到可执行文件中。在某些情况下,我们可能需要从可执行文件中提取自定义资源并保存为独立的文件。在这篇博客文章中,我们将讨论如何使用C++和WinAPI实现这个目......
  • 使用FreeMacker生成静态页面
             我们在生成静态页面时需要先new一个configuration对象,并将Freemacker的版本给它,如果我们的模板是文件则我们需要获得他的路径,以及使用DirectoryForTemplateLoading驱动,如果是字符串,则使用StringTemplateLoader驱动,通常我们是用的字符串驱动,之后我们将模板驱动放......
  • uniapp 微信小程序使用canvas
    微信小程序基础库大于2.9.0后,canvas(画布)支持一套新Canvas2D接口(需指定type属性),同时支持同层渲染,原有接口不再维护。在这种情况下使用原有接口会报错,报错例如:1、使用ctx.draw()会报错:drawisnotafunction,原因:新版Canvas2D接口没有draw方法2、使用ctx.setfillStyle......
  • devops - 在企业内使用verdaccio 搭建npm私有源
    verdaccio是一个基于nodejs的轻量化的私有源.在远程服务器的操作:1.安装和配置verdaccio全局安装verdaccionpminstall-gverdaccio配置文件路径~/.config/verdaccio/config.yaml配置远程访问listen:0.0.0.0:48732.运行verdaccio直接运行verdaccioverdaccio......
  • Android Dagger2简单使用
    Dagger是一个很古老的框架了,当初诞生时候,主要是为了模块之间的解耦。本篇文章主要介绍一下如何使用dagger2,后续会介绍其原理。AS集成对于现在的AS项目,一般都是会集成Kotlin和Java混写,所以可以在想要使用dagger的模块module的gradle下加入如下配置。implementation'com.google.dagg......
  • 使用django连接MySQL
    使用python311+pycharm社区版+MySQL80,使用django连接MySQL1.下载1.1.官网下载pythonhttps://www.python.org/downloads/如我的python3.11.4,可以进入如下的页面进行hash校验https://www.python.org/downloads/release/python-3114/1.2.官网下载pycharmhttps://www.......
  • 在 Kubernetes 中使用 ab 工具测试 HPA
    在Kubernetes中使用ab工具测试HPAKubernetes提供了强大的横向扩展能力,可以根据负载动态调整Pod的副本数量。本文将介绍如何使用ab工具测试HorizontalPodAutoscaler(HPA)。下载并安装ab工具首先,确保你的系统上安装了ab工具。在Ubuntu上,可以使用以下命令安装:su......
  • LWIP官方httpd使用之GET
    前言httpd的移植可以参考上篇文章LWIP官方DEMO使用之httpd服务-USTHzhanglu-博客园(cnblogs.com)此博文为学习笔记,仅介绍如何使用官方demo,无更深入分析。此博文介绍了如何通过GET返回各种数据。关键词:LWIP,HTTP,HTTPD,GET|LWIP版本|lwip-STABLE-2_2_0_RC1|GET......
  • 在winform中使用blazor hybrid构建页面
    1、BlazorHybrid简介BlazorHybrid使开发人员能够将桌面和移动本机客户端框架与.NET和Blazor结合使用。在BlazorHybrid应用中,Razor组件在设备上是本机运行的。这些组件通过本地互操作通道呈现到嵌入式Web视图控件。组件不在浏览器中运行,并且不涉及WebAssembly。R......