使用mutable突破const的限制

简介: 使用mutable突破const的限制

对于一个类中的函数来说,如果这个函数不会改变对象的状态,那么都应该将其声明为常成员函数。


可是,如果出现这样一种情况:


一个函数会改变某个成员对象的值,但它不改变对象状态,这时候也应该怎么做呢?


例如有一个animal类,类中有一个数据成员count专门用于统计animal对象的生育次数。容易理解的是,count的改变并不会改变animal对象的对象状态(即count与animal对象之间并无关系),它只记录animal执行“生育”这个成员函数的次数。


由于生育的过程是不变的,因此“生育”成员函数应被定义为一个常成员函数,然而我们无法在一个常成员函数中修改成员变量的,这时就用的上我们的mutable修饰符了。


在一个类中,被mutable修饰的成员对象在任何时候都不会被视为常对象。

也就是说添加了mutable修饰符的成员对象允许在常成员函数中被修改。


用法举例:


class Animal
{
public:
    Animal();
    void birth() const
    {
        std::cout << "A child was born" << std::endl;
        birth++;
    }
private:
    mutable int birth;
};


像这样使用修饰成员对象就可以突破const的限制,也就是说,允许在常成员函数中,修改birth变量的值。

但是使用mutable会在一定程度上破坏const形成的语言包含机制,所以在使用上一定要把握好度,不能滥用。


相关文章
|
4月前
来及C++primer中的mutable
来及C++primer中的mutable
12 0
|
4月前
mutable的使用
mutable的使用
|
5月前
|
编译器 C++
[C++从入门到精通] 9.inline、const、mutable、this和static
[C++从入门到精通] 9.inline、const、mutable、this和static
34 0
|
10月前
详解const
C++中提供了很多关键字赋予一些东西特殊的函数,比如const、override、final等,本文将从有类和无类两个方面详细介绍const的相关用法于注意事项。剩下的等我这几天加班加点更新吧!
|
5月前
const
const
24 0
|
11月前
const *与const *
const *与const *
|
12月前
|
C++
对象与const
🐰对象与const 🏡常对象 🏡常对象成员 🌸常数据成员 🌸常成员函数 🏡指向对象的常指针 🏡指向常对象的指针(常量指针) 🏡对象的常引用
|
存储 安全 编译器
const 的使用
const 是"constant"的缩写,意思是永恒不变的,它定义的是只读变量的关键字,或者说是定义常变量的关键字。
79 0
|
缓存 C++
【C++】const对象和const成员
【C++】const对象和const成员
107 0