C++ 可变在这种情况下合适吗?

标签 c++ mutable

请问这里使用mutable是否合适:

#include <iostream>

class Base
{
protected:
  int x;

public:
  virtual void NoMod() const
  {
    std::cout << x << std::endl;
  }
  void Draw() const
  {
    this->NoMod();  
  }
};

class Derive : public Base
{
private:
  mutable int y;

public:
  void NoMod() const
  {
    y = 5;
  }
};

int main()
{
  Derive derive;

  // Test virtual with derive
  derive.Draw();

  return 0;
}

基类是第 3 方库。我正在扩展它以提供我自己的 NoMod()。库原始 NoMod() 声明为常量。

我的NoMod()与Base不同的是,它需要修改自己的成员变量。

因此,为了让我自己的 NoMod() 编译并在调用 Draw() 时被调用,我必须

1) 作为常量实现 Derive::NoMod()
2) 使我的 int y 可变。

这是我能做的最好的了吗?

最佳答案

这很难说,因为您没有提供任何关于 y 指的是什么或它是如何使用的上下文。

一般来说,mutable 仅适用于更改可变变量不会更改对象的实际“值”的情况。例如,当我为 C 风格的字符串编写包装器时,我需要使内部 mLength 变量可变,以便我可以缓存长度,即使请求它的是 常量 对象。它没有改变长度或字符串,并且在类本身之外不可见,所以让它可变是可以的。

关于C++ 可变在这种情况下合适吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/749865/

相关文章:

c++ - 函数模板的这两个定义有什么区别?

c++ - 我很困惑如何在这个使用 fork() 克隆进程的示例函数中处理这个 execvp()

data-structures - 可变 Haskell 堆的类型签名

c++ - 在类外定义函数时出错

c++ - 如何动态分配矩阵?

c++ - 如何捕获未知异常并打印

javascript - 在循环中关联按钮和单击操作

scheme - 在方案中操作可变数据中的列表

struct - Julia 结构中的可变字段

arrays - 实体数组不会 swift 发生变异?