2012-04-08 29 views
0

我擴展了const函數,並且每次調用const函數時都必須創建一個映射。如在關於尊重常量,同時避免在堆上重新分配

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

    return utility::eval(bar); 
} 

但聲明酒吧是非常昂貴的。通過聲明bar是一個實例變量,我可以將我的CPU佔用減少一半,但這樣做並不尊重constess。有沒有一種非常好的方法來獲得兩全其美?

+0

最好的事情可能是修復'eval'函數以獲得更明智的界面。 – 2012-04-08 23:00:51

回答

2

您可以將其定義爲mutable成員變量。

但是,您不應該使用mutable作爲一種冒險的解決方法,適用於您將自己設計爲常規角落的情況。只有在修改變量不會改變類的邏輯狀態(即對成員函數產生的結果沒有可觀察的影響)時,才應該使用它。你的聽起來像是這樣的情況,所以應該沒問題。