我擴展了const函數,並且每次調用const函數時都必須創建一個映射。如在關於尊重常量,同時避免在堆上重新分配
int foo() const {
map<int, int> bar;
// setup bar
...
return utility::eval(bar);
}
但聲明酒吧是非常昂貴的。通過聲明bar是一個實例變量,我可以將我的CPU佔用減少一半,但這樣做並不尊重constess。有沒有一種非常好的方法來獲得兩全其美?
我擴展了const函數,並且每次調用const函數時都必須創建一個映射。如在關於尊重常量,同時避免在堆上重新分配
int foo() const {
map<int, int> bar;
// setup bar
...
return utility::eval(bar);
}
但聲明酒吧是非常昂貴的。通過聲明bar是一個實例變量,我可以將我的CPU佔用減少一半,但這樣做並不尊重constess。有沒有一種非常好的方法來獲得兩全其美?
是的。
class Foo {
mutable map<int, int> bar;
...
}
又見http://www.highprogrammer.com/alan/rants/mutable.html和三重檢查是否是有意義的,你實際使用mutable
這裏。
您可以將其定義爲mutable
成員變量。
但是,您不應該使用mutable
作爲一種冒險的解決方法,適用於您將自己設計爲常規角落的情況。只有在修改變量不會改變類的邏輯狀態(即對成員函數產生的結果沒有可觀察的影響)時,才應該使用它。你的聽起來像是這樣的情況,所以應該沒問題。
最好的事情可能是修復'eval'函數以獲得更明智的界面。 – 2012-04-08 23:00:51