C++高级进阶 第二季:mutable 关键字

简介:

零、文章来由

打算将基础知识在看书的同时系统的整理一下,方便大家也方便自己。整理的知识尽量参照书本知识,比网上获取的资料有更高的可信度。

一、作用

mutable 用来解决常函数中不能修改对象的数据成员的问题。

如果在一些情况下,希望在常函数中仍然可以修改某个成员变量的值,就在该变量前加上mutable。能在保证常量对象大部分数据成员仍然“只读”情况下,实现对个别成员的修改。

#include <iostream>
#include <string>
using namespace std;

class Student
{
    string Name; //默认为private
    int times_of_getname;
public:
    Student(char *name)
        :Name(name),times_of_getname(0) {

    }

    string get_name() {
        times_of_getname++;
        return Name;
    }

    void PrintTimes() const {
        cout<<times_of_getname<<endl;
    }
};

int main() 
{
    const Student s("Bill王");
    cout<<s.get_name()<<endl;
    cout<<s.get_name()<<endl;
    s.PrintTimes();

    return 0; 
}

如上程序会报错,因为常量对象s(信息不能被修改的学生实体),调用 非const 函数 get_name(),但是如果将 get_name() 改为 const,有无法修改 times_of_getname。

但如果修改为:

mutable int times_of_getname;

string get_name() const{
}

即可

二、使用注意事项

使用关键字mutable要注意以下几点:

(1)mutable 只用于类的非静态和非常量数据成员。

(2)mutable 关键字提示编译器该变量可以被类的const函数修改。

(3)一个类中,用mutable修饰的变量只能是少数,或者根本不使用,大量使用代表程序设计上的缺陷。


参考资料

[1]陈刚.C++高级进阶教程[M].武汉:武汉大学出版社,2008.

相关文章
|
19天前
|
并行计算 调度 C++
|
12天前
|
程序员 C++
为什么c++要引入class关键字
总之,C++引入 `class`关键字是为了支持面向对象编程,通过封装、继承、多态和抽象等特性,提供了更强大、灵活和可维护的编程工具,使得程序开发更加高效和可扩展。这使C++成为一种强大的编程语言,广泛用于各种应用领域。
23 1
|
15天前
|
C语言 C++
【C++入门】关键字、命名空间以及输入输出
【C++入门】关键字、命名空间以及输入输出
|
16天前
|
编译器 C++
【C++进阶】引用 & 函数提高
【C++进阶】引用 & 函数提高
|
21天前
|
存储 C++
【C++进阶(九)】C++多态深度剖析
【C++进阶(九)】C++多态深度剖析
|
21天前
|
编译器 C++
【C++进阶(八)】C++继承深度剖析
【C++进阶(八)】C++继承深度剖析
|
21天前
|
编译器 C语言 C++
【C++进阶(七)】仿函数深度剖析&模板进阶讲解
【C++进阶(七)】仿函数深度剖析&模板进阶讲解
|
21天前
|
设计模式 C语言 C++
【C++进阶(六)】STL大法--栈和队列深度剖析&优先级队列&适配器原理
【C++进阶(六)】STL大法--栈和队列深度剖析&优先级队列&适配器原理
|
21天前
|
存储 缓存 编译器
【C++进阶(五)】STL大法--list模拟实现以及list和vector的对比
【C++进阶(五)】STL大法--list模拟实现以及list和vector的对比
|
21天前
|
算法 C++ 容器
【C++进阶(四)】STL大法--list深度剖析&list迭代器问题探讨
【C++进阶(四)】STL大法--list深度剖析&list迭代器问题探讨