Mutable
mutable關鍵字用于修飾類的非靜態(tài)數(shù)據(jù)成員。當數(shù)據(jù)成員被聲明為mutable時,它將允許在const成員函數(shù)中修改該數(shù)據(jù)成員的值,即使該函數(shù)本身被聲明為不修改對象的狀態(tài)。默認情況下,const成員函數(shù)是不允許修改對象的狀態(tài)的,因為它們被認為是只讀函數(shù)。然而,有時候在一個const成員函數(shù)中,可能需要修改某個數(shù)據(jù)成員的值,這時可以使用mutable關鍵字來解決這個問題。
Case :

這是在“等待事件”一節(jié)中“創(chuàng)建線程安全的隊列”的部分代碼。在這里,互斥量成員之所以要被修飾為“mutable”,是因為在拷貝構(gòu)造函數(shù)中傳入的形參是一個const引用,并且empty是一個const成員函數(shù),而鎖住互斥量是個可變操作。
mutable的另一種不太常見的用法在lambda函數(shù)中。一般來說,要想在lambda函數(shù)中修改被捕獲的值,就應該通過引用傳遞被捕獲的值。但如果想讓這個修改只在lambda作用域內(nèi)生效,即在值傳遞的情況下修改變量,比較麻煩但很容易想到的做法就是在lambda中創(chuàng)建一個臨時變量:

但使用mutable關鍵字就可以輕松地解決這個問題:

標簽:C++