zoukankan      html  css  js  c++  java
  • C++98常用特性介绍——mutable关键字

    讲mutable前,先讲一下const函数,讲const函数前,先讲一下函数前后加const的区别

    一、C++函数前后加const的区别

      1)函数前加const:普通函数或非静态成员函数前均可加const修饰,表示函数的返回值为const,不可修改(主要是用于类的指针变量),格式为

        const RetunType FuncitonName(param list)

      2)函数后加const:类的非静态成员函数可加const修饰,函数为只读成员函数,成员变量为只读。

        ReturnType FunctionName(param list) const

      注:C++编译器在实现const的成员函数时,为了确保该函数不能修改类的实例状态,会在函数中添加一个隐式的参数const this,

        这样类的成员变量的值,即成员变量为read only。

    二、mutable关键字

      mutable(易变的)是 C++ 中一个不常用的关键字。只能用于类的非静态和非常量数据成员。由于一个对象的状态由该对象的非静态数据成员决定,

      所以随着数据成员的改变,对象的状态也会随之发生变化。如果一个类的成员函数被声明为 const 类型,表示该函数不会改变对象的状态,也就是该

      函数不会修改类的非静态数据成员。但是有些时候需要在该类函数中对类的数据成员进行赋值,这个时候就需要用到 mutable 关键字,如:

      #include <iostream>

      using namespace std;

      class Student

      {

      public:

        Student() {}

        int setAge(int age) const  {this->age = age;}  //错误:int age前面加mutable关键字修饰符即可以编译通过

             int SetAge(int age)  {this->age = age;}

          int getAge() const   {return this->age;}

          int GetAge()  {return this->age;}

      private:

        int age;

      }

      

      int main()

      {

        const Student s1;  //const对象

        int age = s1.getAge();//错误:const对象只能调用后const成员函数

        Student s2;     //非const对象

        age = s2.getAge(); //调用const成员函数,正确 

        age = s2.GetAge();//调用非const成员函数,正确

        

        return 0;

      }

    三、总结

      1、后const成员函数中可以改变类的mutable类型的成员变量。

      2、const对象只能调用后const成员函数。

      3、非const对象既可以调用后const成员函数,又可以调用非const成员函数。

  • 相关阅读:
    python 入门
    element 使用问题总结
    element dialog 弹窗 解决每次先加载上一次数据再加载本次数据问题
    JS 对变量进行全文替换方法
    react源码解析10.commit阶段
    react源码解析9.diff算法
    react源码解析8.render阶段
    react源码解析7.Fiber架构
    react源码解析6.legacy模式和concurrent模式
    react源码解析5.jsx&核心api
  • 原文地址:https://www.cnblogs.com/zhangnianyong/p/11910883.html
Copyright © 2011-2022 走看看