我扩展了一个 const 函数,每次调用该 const 函数时,我都必须创建一个映射。如在
int foo() const {
map<int, int> bar;
// setup bar
...
return utility::eval(bar);
}
但是申报酒吧非常昂贵。我可以通过声明 bar 是一个实例变量来将我的 CPU 占用量减少一半,但这样做不尊重 constess。有没有一种非hacky的方法可以两全其美?
您可以将其定义为mutable
成员变量。
但是mutable
,对于将自己设计为 const 角落的情况,您不应该将其用作 hacky 解决方法。你应该只在修改变量不会改变类的逻辑状态的情况下使用它(即它对成员函数产生的结果没有明显的影响)。你的听起来像这样的情况,所以应该没问题。
是的。
class Foo {
mutable map<int, int> bar;
...
}
另请参阅http://www.highprogrammer.com/alan/rants/mutable.htmlmutable
并三重检查您在此处实际使用是否有意义。