24.不允许修改类的成员变量的函数实现方法-灵析社区

菜鸟码转

如果想达到一个类的成员函数不能修改类的成员变量,只需用 const 关键字来修饰该函数即可。该问题本质是考察 const 关键字修饰成员函数的作用,只不过以实例的方式来考察,面试者应熟练掌握 const 关键字的作用。同时 C++ 还存在与 const 相反的关键字 mutable。被 mutable 修饰的变量,将永远处于可变的状态,即使在一个 const 函数中。如果我们需要在 const 函数中修改类的某些成员变量,这时就需要用到 mutable。

使用 mutable 的注意事项:

  • mutable 只能作用于类的非静态和非常量数据成员。
  • 在一个类中,应尽量避免大量使用 mutable,大量使用 mutable 表示程序设计存在缺陷。

C++

#include <iostream>

using namespace std;

class A
{
public:
    mutable int var1;
    int var2;
    A()
    {
        var1 = 10;
        var2 = 20;
    }
    void fun() const // 不能在 const 修饰的成员函数中修改成员变量的值,除非该成员变量用 mutable 修饰
    {
        var1 = 100; // ok
        var2 = 200; // error: assignment of member 'A::var1' in read-only object
    }
};

int main()
{
    A ex1;
    return 0;
}

我们可以看到在 const 函数中, mutable 修饰的变量可以修改,否则则不能修改。

阅读量:1106

点赞量:0

收藏量:0