-
mutable是什么?
- mutable的中文译为 “可变的,易变的”,是constant(即C++中的const)的反义词。
- C++中为了突破 const 的限制而采用的,被 mutable 修饰的变量将永远处于可变的状态。
-
为什么要用mutable?
- 我们知道,如果类的成员函数不会改变对象的状态,那么这个成员函数一般会声明成const的。但是,有些时候,我们需要在const的函数里面修改一些跟类状态无关的数据成员,那么这个数据成员就应该被 mutable 来修饰。
- mutable 常用于指定不影响类的外部可观察状态的成员(通常用于互斥体[mutexes]、记忆缓存[memo caches]、惰性求值[lazy evaluation]和访问指令[access instrumentation]等)。
class ThreadsafeCounter { mutable std::mutex m; // mutable 和 mutex 用在一起情况 int data = 0; public: int get() const { std::lock_guard<std::mutex> lk(m); return data; } void inc() { std::lock_guard<std::mutex> lk(m); ++data; } }; -
使用mutable的注意事项
- mutable只能作用于类的非静态和非常量数据成员。mutable不能修饰static数据成员,因为static数据成员存储在Data段或BSS段,属于类,不属于类对象,因此类的static数据成员不需要 mutable 的修饰。但常对象和常函数可以对其任意地修改,对于常对象的数据成员一般不可以被修改,若想修改,则需要 mutable 的修饰。
- 在一个类中,应尽量或者不用 mutable,大量使用 mutable表示程序设计存在缺陷。
class Student { string name; mutable int getNum; // ok mutable const int test; // 编译出错 //mutable static int static1; // 编译出错 } -
什么是常函数?
- 常函数就是带const修饰的函数。
-
为什么要有常函数这个概念?
- 为了封装的良好性,有时我们用到的一些函数并不需要我们去改变类中的参数和成员变量,仅仅只是为了显示和输出的作用,因此才引进常函数。
-
参考
相关推荐
c++关键字mutable深入解析
先说用法,mutable关键字只能修饰非静态以及非常量成员变量,使用mutable修饰的成员变量在const函数中的值是可以修改的
C++ Mutable
1、mutable 含义及常规使用 mutable 英文中表示,易变的,不定的;性情不定的,而在代码中表示 可变数据成员。 由前面整理的 const详解 知道,由const修饰的成员函数中,不能对成员变量进行修改,因为隐藏的形参是 const 属性的。 而实际开发过程中,我们可能需要对某些成员变量进行修改,就需要用到 mutable。 class constA { public: constA(int a):m_a(a){} void funcA() const { cout << ++m_
gmsv源代码c语言,石器时代ABLua的原理、简介、过程、运用、收发
操作原理(一)服务端:服务器源文件客户端:客户所操作的程序(既是游戏客户端)接口:既是某项功能(例如:鼠标点击,文字发送,战斗,观战,人物动作等)返回的值ABlua:在源代码中添加的整套引擎作为回调接口--lua所实现的功能是基于服务端源码添加的接口由该接口与客户端发送封包实现功能源码里是否有ABlua回调接口?例如:源码里的gmsv/battle.c文件(既是战斗回调文件)以下为简单描述C给予l...
C++mutable
mutable是C++中的一个关键字,用于修饰类的成员变量。它的主要作用是允许在const成员函数中修改被mutable修饰的成员变量。这打破了const成员函数不能修改对象状态的一般规则。让我们通过几个例子来理解mutable的用法: 在这个例子中,尽管是一个const成员函数,但它仍然可以修改成员,因为被声明为mutable。mutable通常用于以下场景:a) 缓存: 当某个计算很昂贵,我们想在const对象中缓存结果时。b) 互斥锁: 在多线程环境中,即使对象是const的,我们也可能需要锁定资源。
WorkBuddy 集成 飞书CLI,全程10分钟,丝滑无比,老板要注意了...
飞书CLI实测:10分钟实现AI操控飞书办公 飞书CLI作为命令行工具,让用户通过简单命令完成飞书各项操作。本文记录了从安装到使用的完整过程:一键安装仅需10分钟,支持200多条命令覆盖飞书全部功能,与AI结合后可实现自然语言办公。实测中成功用语音指令创建了7天发文计划日程,验证了其便捷性。虽然首次认证存在超时问题,但整体体验流畅。该工具将复杂操作简化为自然语言指令,大幅提升办公效率,特别适合需要频繁使用飞书的用户。后续还将探索更多自动化办公场景。
大连海事大学课设题目/基于LM331的频率电压转换器
部分基于LM331的频压转换的实物连接问题
c++ 关键字 mutable
今天来讲讲c++中关键字mutable 在c++primer中mutable第一次出现在类中,在讲解常成员函数的时候引入的。 问题来了,mutable有什么用? 我们知道,c++类中引入const关键字在成员函数尾部,使函数成为常成员函数。 这么做的目的是,在常成员函数内部,不允许修改调用它的对象的内部状态(即不许修改对象的成员变量的值)。!! 看不懂?没关系,继...
centos+apache+subversion+LDAP
yum install subversion 报错:[Errno 14] HTTP Error 416 - Requested Range Not Satisfiable 正在尝试其它镜像。 zaici
C++中的mutable关键字
mutalbe的中文意思是“可变的,易变的”,跟constant(既C++中的const)是反义词。 在C++中,mutable也是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中。 我们知道,如果类的成员函数不会改变对象的状态,那么这个成员函数一般会声明成const的。但是,有些时候,我们需要在const的函数里面
实战避坑:泛微E9流程接口与单点登录(SSO)开发全解析(含自定义Action、Restful API与免密登录)
本文深入解析泛微E9流程接口与单点登录(SSO)开发中的关键技术与避坑指南,涵盖自定义Action开发、Restful API鉴权机制及跨系统单点登录实现。通过实战案例与代码示例,帮助开发者高效完成二次开发,解决系统集成中的数据孤岛问题,提升企业信息化建设效率。
Word毕业论文排版:图片和表格题注的终极指南(含自动编号技巧)
本文是Word毕业论文排版中图片和表格题注的终极指南,详细讲解了如何利用题注功能实现自动编号,告别繁琐易错的手动操作。核心内容包括创建定制标签、配置带章节的编号格式、插入交叉引用以及一键更新全文编号的技巧,旨在帮助学生构建自动化文档体系,提升排版效率和论文严谨性。
【C++】Mutable关键字
mutable关键字是一个少用的关键字。而mutable的含义与const正好相反,当一个类的成员变量不能修改时,我们在其声明处前添加const关键字进行修饰。但是,如果这个成员变量是可变的,那我们就使用mutable关键字修饰变量类型。 但我们会发现一个问题,那就是不使用const修饰的变量本身就是可以修改的,那为什么还要添加mutable关键字呢?这里涉及到一个用法,也是关于mutable的最...
《AI编程实战:深度学习模型改进与系统部署》,改进专栏目录和介绍
专深度学习相关项目都写在本专栏,《一次订阅解锁全部,都有源码,永久观看》,包括车牌识别、股票预测、人脸识别、风格迁移、图像修复、图像超分辨重建、图像分割等任务,Web/PyQt系统实现。引入Transformer、Swin Transformer、DenseNet、ViT、ConvNeXt等算法实战,提供卷积改进,魔改对比实验,模型剪枝,模型蒸馏,模型量化,全网独家整合改进专栏,为不同领域的同学发表论文提供了大力支持。
C++ 中的 mutable 关键字
C++ 中的 mutable 关键字在C++中,mutable 是为了突破 const 的限制而设置的。可以用来修饰一个类的成员变量。被 mutable 修饰的变量,将永远处于可变的状态,即使是 const 函数中也可以改变这个变量的值。比如下面这个例子:#include <iostream> using namespace std; class Test { public: Test();
Ultralytics YOLOv8 英伟达™ Jetson®处理器部署
英伟达™(NVIDIA®)Jetson 是一系列嵌入式计算板卡,旨在为边缘设备带来加速的 AI(人工智能)计算。这些小巧而功能强大的设备围绕英伟达™(NVIDIA®)的GPU架构打造,能够直接在设备上运行复杂的人工智能算法和深度学习模型,而无需依赖云计算资源。Jetson 板卡通常用于机器人、自动驾驶汽车、工业自动化和其他需要在本地以低延迟和高效率执行人工智能推理的应用中。此外,这些板卡基于 ARM64 架构,与传统 GPU 计算设备相比运行功耗更低。英伟达™(NVIDIA®)JetPack SDK。
文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况
主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。
C++中关键字mutable
C++中的关键字mutable翻译出来是:易变的。其可以看做是const的反义词,作用也是反向于const的。当用const修饰类对象时(常对象),代表着其值是不能修改的。但我们也许会在某些时刻需要一种可以在常对象内可修改的变量。这时我们就需要了关键字mutable。 型如: mutable <变量类型> <变量名> 当使用mutable修饰成员变量以...
jre9下载 jdk9
(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】
深入理解C++中的mutable关键字
mutable的中文意思是“可变的,易变的”,跟constant(既C++中的const)是反义词。 在C++中,mutable也是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中。 我们知道,如果类的成员函数不会改变对象的状态,那么这个成员函数一般会声明成const的。但是,有些时候,我们需要在const的函数里面修改一些跟类状态...
STM32F407中文手册
STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。
C++关键字mutable
关键字 mutable 是一个奇怪的修饰符(specifier),它只能够用于一个类的非静态数据成员。下面我将讨论 mutable 的语义和用法,但是首先我要解释一下 C++ 对象模型的一个关键概念。 对象的状态 一个对象的状态由其非静态数据成员的值构成,因此,修改一个数据成员将会改变整个对象的状态。将一个成员函数声明为 const 能够保证它不会改变对象的状态。 然而在一些
c++ mutable关键字的作用
在上述示例中,`ExpensiveCalculation` 类具有一个被 `mutable` 修饰的布尔型变量 `isCached` 和一个被 `mutable` 修饰的整型变量 `cachedResult`。在上述示例中,`Counter` 类具有一个被 `mutable` 修饰的成员变量 `count`。需要注意的是,尽管 `mutable` 允许在 const 成员函数中修改被修饰的成员变量,但在设计类时,仍应慎重使用 `mutable`,并确保仅在适当的情况下使用它,以保持类的语义和封装性。
C++关键字:mutable
关键字 mutable 是一个奇怪的修饰符(specifier),它只能够用于一个类的非静态数据成员。一个对象的状态由其非静态数据成员的值构成,因此,修改一个数据成员将会改变整个对象的状态。将一个成员函数声明为 const 能够保证它不会改变对象的状态。 然而在一些情况下,对象的逻辑状态与其物理状态之间可能有差别。例如,对于一个表示绘画图像的对象就存在这种情况。如果图像还没有更
C++ mutable关键字
在C++中,被声明为的成员函数承诺不会修改对象的任何成员变量(除了被标记为的变量)。这是C++的常量正确性(const-correctness)的一部分。然而,有些情况下,对象在逻辑上是常量,但内部需要修改一些不影响对象逻辑状态的成员。例如: 代码解释 关键字表示,即使包含这个成员的类对象是的,或者在一个成员函数中,也可以修改数组的内容。为什么需要这样?在成员函数中,我们可能需要加锁(例如,读取数据时保护内部状态),而加锁操作会修改互斥锁的内部状态。因此,存储互斥锁的内存区域(即)需要被
C++中mutable、volatile关键字
C++中mutable、volatile关键字
C++的mutable关键字
在普通成员函数(未加const)或非成员函数中,mutable与普通成员无异。在 const成员函数中,编译器会将this视为const Foo* const,唯有mutable成员不受该限制。在C++中,把const放在成员函数声明的末尾,表明该成员函数不会修改它所属对象的任何非mutable成员,也不会调用任何非const成员函数;在类的非静态数据成员前使用mutable,表示即使在const成员函数内,也可以修改该成员。只能修饰类的非静态数据成员,不能修饰静态成员、函数、类型别名等。
7591



被折叠的 条评论
为什么被折叠?



