尊重恒定性,同时避免在堆上重新分配

On respecting constness while avoiding reallocating on the heap

本文关键字:新分配 分配 恒定性      更新时间:2023-10-16

我扩展了一个常量函数,每次调用这个常量函数时,我都必须创建一个映射。 如在

int foo() const {
  map<int, int> bar;
  // setup bar
  ...
  return utility::eval(bar);
}

但是声明酒吧非常昂贵。 我可以通过声明 bar 是一个实例变量来将 CPU 占用空间减少一半,但这样做并不尊重常量。 有没有一种非黑客方法可以两全其美?

是的。

class Foo {
    mutable map<int, int> bar;
    ...
}

另请参阅 http://www.highprogrammer.com/alan/rants/mutable.html 和三重检查,在此处实际使用mutable是否有意义。

您可以将其定义为mutable成员变量。

但是,您不应该将mutable用作一种笨拙的解决方法,以应对您已经将自己设计成一个角落的情况。 只有在修改变量不会更改类的逻辑状态(即它对成员函数产生的结果没有可观察到的影响)的情况下,才应使用它。 你的听起来像这样的情况,所以应该没问题。