使用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形成的语言包含机制,所以在使用上一定要把握好度,不能滥用。


相关文章
|
8月前
|
安全 编译器 C++
对C++中const的说明
对C++中const的说明
36 0
|
1月前
|
人工智能 安全 机器人
【C++】const_cast基本用法(详细讲解)
【C++】const_cast基本用法(详细讲解)
|
1月前
来及C++primer中的mutable
来及C++primer中的mutable
14 0
|
1月前
mutable的使用
mutable的使用
|
11月前
详解const
C++中提供了很多关键字赋予一些东西特殊的函数,比如const、override、final等,本文将从有类和无类两个方面详细介绍const的相关用法于注意事项。剩下的等我这几天加班加点更新吧!
|
1月前
|
编译器 C++
[C++从入门到精通] 9.inline、const、mutable、this和static
[C++从入门到精通] 9.inline、const、mutable、this和static
37 0
对象与const
🐰对象与const 🏡常对象 🏡常对象成员 🌸常数据成员 🌸常成员函数 🏡指向对象的常指针 🏡指向常对象的指针(常量指针) 🏡对象的常引用
|
编译器 C语言 C++
【四、const与this指针详解】详解C与C++中const的异同,类中的const
【四、const与this指针详解】详解C与C++中const的异同,类中的const
93 0
|
JavaScript 前端开发
let和const
let和const

热门文章

最新文章