0

const 関数を拡張しましたが、その const 関数が呼び出されるたびにマップを作成する必要があります。のように

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

  return utility::eval(bar);
}

しかし、バーを宣言することは非常に高価です。bar がインスタンス変数であると宣言することで、CPU フットプリントを半分に削減できますが、そうすると conssess が尊重されません。両方の世界を最大限に活用するための非ハッキーな方法はありますか?

4

2 に答える 2

2

mutableメンバー変数として定義できます。

ただし、mutable自分自身を const コーナーに設計した状況のハックな回避策として使用しないでください。変数を変更してもクラスの論理状態が変わらない (つまり、メンバー関数が生成する結果に目に見える影響がない) 場合にのみ使用してください。あなたの状況はそのような状況のように聞こえるので、問題ないはずです。

于 2012-04-08T22:51:20.290 に答える
2

はい。

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

http://www.highprogrammer.com/alan/rants/mutable.htmlも参照して、ここで実際に使用することが理にかなっているかどうかをトリプルチェックしてmutableください。

于 2012-04-08T22:51:47.317 に答える