3 回答

TA貢獻(xiàn)1936條經(jīng)驗(yàn) 獲得超7個(gè)贊
它允許區(qū)分按位const和邏輯const。邏輯const是指對象不會(huì)以通過公共接口可見的方式更改,例如鎖定示例。另一個(gè)例子是一個(gè)在第一次請求時(shí)計(jì)算值的類,并緩存結(jié)果。
因?yàn)?code>mutable可以在lambda上使用c ++ 11 來表示按值捕獲的內(nèi)容是可修改的(默認(rèn)情況下不是這樣):
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貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超4個(gè)贊
您對boost :: mutex的使用正是此關(guān)鍵字的用途。另一個(gè)用途是用于內(nèi)部結(jié)果緩存以加快訪問速度。
基本上,'mutable'適用于不影響對象外部可見狀態(tài)的任何類屬性。
在您的問題的示例代碼中,如果done_的值影響外部狀態(tài),則可變性可能不合適,這取決于...中的內(nèi)容; 部分。
- 3 回答
- 0 關(guān)注
- 659 瀏覽
添加回答
舉報(bào)