除了允許變量被const函數(shù)修改之外,'mutable'關(guān)鍵字是否有任何其他用途前段時間我遇到了一些用mutable關(guān)鍵字標記類的成員變量的代碼。據(jù)我所知,它只是允許您修改const方法中的變量:class Foo { private:
mutable bool done_; public:
void doSomething() const { ...; done_ = true; } };這是這個關(guān)鍵字的唯一用途,還是有更多的東西比它的眼睛?我已經(jīng)在一個類中使用了這個技術(shù),標記為一個boost::mutex可變的允許const函數(shù)來鎖定它出于線程安全的原因,但是,說實話,它感覺有點像黑客。?
3 回答

LEATH
TA貢獻1936條經(jīng)驗 獲得超7個贊
它允許區(qū)分按位const和邏輯const。邏輯const是指對象不會以通過公共接口可見的方式更改,例如鎖定示例。另一個例子是一個在第一次請求時計算值的類,并緩存結(jié)果。
因為mutable
可以在lambda上使用c ++ 11 來表示按值捕獲的內(nèi)容是可修改的(默認情況下不是這樣):
int x = 0;
auto f1 = [=]() mutable {x = 42;}; // OK
auto f2 = [=]() {x = 42;}; // Error: a by-value capture cannot be modified in a non-mutable lambda

明月笑刀無情
TA貢獻1828條經(jīng)驗 獲得超4個贊
您對boost :: mutex的使用正是此關(guān)鍵字的用途。另一個用途是用于內(nèi)部結(jié)果緩存以加快訪問速度。
基本上,'mutable'適用于不影響對象外部可見狀態(tài)的任何類屬性。
在您的問題的示例代碼中,如果done_的值影響外部狀態(tài),則可變性可能不合適,這取決于...中的內(nèi)容; 部分。
- 3 回答
- 0 關(guān)注
- 662 瀏覽
添加回答
舉報
0/150
提交
取消