0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

C++中mutable关键字详解与实战

Android编程精选 来源:编程学习总站 作者:写代码的牛顿 2021-09-10 09:23 次阅读

mutable关键字详解与实战

C++中mutable关键字是为了突破const关键字的限制,被mutable关键字修饰的成员变量永远处于可变的状态,即使是在被const修饰的成员函数中。

在C++中被const修饰的成员函数无法修改类的成员变量,成员变量在该函数中处于只读状态。然而,在某些场合我们还是需要在const成员函数中修改成员变量的值,被修改的成员变量与类本身并无多大关系,也许你会说,去掉函数的const关键字就行了。可问题是,我只想修改某个变量的值,其他变量希望仍然被const关键字保护。

现在有个场景,我们想获取函数被调用的次数,代码如下:

class Widget{ public: Widget(); ~Widget() = default; int getValue() const; int getCount() const; private: int value; int count; };

这里我们想要获取getValue函数被调用次数,普遍的做法是在getValue函数里对成员变量count进行加1处理,可是getValue被关键字const修饰啊,无法修改count的值。这个时候mutable派上用场了!我们用mutable关键字修饰count,完整代码如下:

#include 《iostream》 class Widget{ public: Widget(); ~Widget() = default; int getValue() const; int getCount() const; private: int value; mutable int count; }; Widget::Widget() : value(1), count(0) { } int Widget::getValue() const{ count++; return value; } int Widget::getCount() const{ return count; } int main() { Widget w1; for(int i = 0; i 《 5; i++){ w1.getValue(); } std::cout 《《 w1.getCount() 《《 std::endl; return 0; }

被mutable修饰的成员变量count在getValue函数里进行加1计数,编译运行输出如下:

5

既保护了其他成员变量,又能达到我们单独修改成员变量count值的目的。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

原文标题:C++ mutable关键字如何使用?

文章出处:【微信号:AndroidPush,微信公众号:Android编程精选】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    C语言关键字分别发生在哪个阶段

    以下C语言关键字,分别发生在哪个阶段? 第一个,define。 首先得纠正一下,define 并不是C语言里面的关键字,即使加了井号,也不是。 define 属于
    的头像 发表于 11-24 10:31 171次阅读

    C++新手容易犯的十个编程错误

    简单的总结一下 C++ 新手容易犯的一些编程错误,给新人们提供一个参考。 1 有些关键字在 cpp 文件多写了 对于 C++ 类,一些关键字
    的头像 发表于 11-15 12:42 309次阅读

    C语言和C++结构体的区别

    同样是结构体,看看在C语言和C++中有什么区别?
    的头像 发表于 10-30 15:11 199次阅读

    C语言关键字--typedef

    C语言关键字使用方法学习指南!
    的头像 发表于 10-07 12:44 242次阅读

    使用边缘AI和Sitara处理器进行关键字检测

    电子发烧友网站提供《使用边缘AI和Sitara处理器进行关键字检测.pdf》资料免费下载
    发表于 09-02 11:30 0次下载
    使用边缘AI和Sitara处理器进行<b class='flag-5'>关键字</b>检测

    C++实现类似instanceof的方法

    函数,可实际上C++没有。但是别着急,其实C++中有两种简单的方法可以实现类似Java的instanceof的功能。 在 C++
    的头像 发表于 07-18 10:16 574次阅读
    <b class='flag-5'>C++</b><b class='flag-5'>中</b>实现类似instanceof的方法

    快速掌握C语言关键字

    C语言中的32个关键字你知道多少个呢?根据关键字的作用分为四类:数据类型关键字、控制语句关键字、存储类型
    的头像 发表于 07-06 08:04 337次阅读
    快速掌握<b class='flag-5'>C</b>语言<b class='flag-5'>关键字</b>

    inline关键字被优化导致此类函数被布局在flash内,怎么处理?

    问题解决。 但是,希望乐鑫官方把idf内源码的inline关键词都替换为__attribute((always_inline)),因为inline关键字不可靠! 期待下次idf版本更新能解决此bug,自己修改idf源码真的是权
    发表于 06-21 12:03

    使用 MISRA C++:2023® 避免基于范围的 for 循环中的错误

    在前两篇博客,我们 向您介绍了新的 MISRA C++ 标准 和 C++ 的历史 。在这篇博客,我们将仔细研究以 C++
    的头像 发表于 03-28 13:53 784次阅读
    使用 MISRA <b class='flag-5'>C++</b>:2023® 避免基于范围的 for 循环中的错误

    嵌入式C语言面试大挑战

    C++static关键字除了具有C的作用还有在类的使用在类
    发表于 03-05 14:18 344次阅读
    嵌入式<b class='flag-5'>C</b>语言面试大挑战

    简单总结一下嵌入式C++中常见的错误形式

    对于 C++ 类,一些关键字只要写在 .h 中就好,cpp 中就不用再加上了,比如 virtual、static 等关键字,如果在 cpp 多写,编译器会报错。
    的头像 发表于 02-23 09:40 495次阅读

    关键字搜索文件夹某个TXT文件

    文件夹随时创造TXT文件,如何及时选出刚创造的文件?或关键字搜索出需要的TXT文件?
    发表于 02-06 15:22

    在NVM和本地\"内存定义数组(静态 /global /local)的\"关键字是什么?

    在 NVM 和本地\"内存定义数组(静态 /global /local)的\"关键字是什么? 还有与 32 位对齐的关键字怎么样。
    发表于 01-25 07:52

    C++简史:C++是如何开始的

    的 MISRA C++:2023 博客系列的第二部分。 在这篇博客,我们将深入探讨 C++ 的历史、编程语言多年来的发展历程以及它的下一步发展方向。
    的头像 发表于 01-11 09:00 581次阅读
    <b class='flag-5'>C++</b>简史:<b class='flag-5'>C++</b>是如何开始的

    探讨多线程编程的volatile关键字应用

    有时候,我们可能需要在指针类型之间进行转换,而编译器会认为这是不安全的操作,从而导致编译错误。使用volatile关键字可以告知编译器,这个类型转换是有意义的,不应该引发错误。
    发表于 12-27 13:53 454次阅读