0

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

int foo() const {
  map<int, int> bar;
  // setup bar
  ...

  return utility::eval(bar);
}

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

4

2 回答 2

2

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

但是mutable,对于将自己设计为 const 角落的情况,您不应该将其用作 hacky 解决方法。你应该只在修改变量不会改变类的逻辑状态的情况下使用它(即它对成员函数产生的结果没有明显的影响)。你的听起来像这样的情况,所以应该没问题。

于 2012-04-08T22:51:20.290 回答
2

是的。

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

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

于 2012-04-08T22:51:47.317 回答