關鍵字mutable小議

2021-04-28 22:10:24 字數 1345 閱讀 4662

關鍵字mutable小議

內容:我們知道在用const修飾的類成員函式,這意味著什麼,從effective c++這本書上我們可以了解到,

這裡存在兩個流行的概念:bitwise constness(or physical constness)和logical constness.

bitwise const陣營的人相信,成員函式只有在不更改物件任何成員變數(static變數除外)時才可

以說是const.也就是說它不能更改物件內的任何乙個bit.然而我們不難發現有些例子能夠通過bitwise

測試卻存在潛在的改變成員變數的危險,比如說:

class string

char& operator(int index)const       

private:

char* pstring_;       

};客戶可以寫下如下**:

const string str("any man of mine!");

char& c=str[0]; //call const-function

c='b'; //modified 'pstring_ '  from outer

這樣寫很顯然不符合const的基本出發點(不能改變物件的屬性),但是operator是通過bitwise測試

的,編譯器是能通過的,但不是我們想要的理想目標.

這種情況下就匯出了logical constness,這一派主張乙個const成員函式可以修改它所處理物件的某

些位,但只有在客戶端偵測不出來的時候才應如此.這種主張就導致了關鍵字mutable的誕生,它的作用是

const函式實現體內可以修改由關鍵字mutable修飾的成員變數.比如我們修改一下前面一段**:

class string

char& operator(int index)const       

//add new function to get the length of string

int getlength()const

return isvalidlength_;

}private:

char* pstring_; 

mutable bool isvalidlength_;

mutable int  stringlength_;

};這裡新增的函式getlength雖然有const修飾,但是實現體中我們修改了關鍵字mutable修飾的成員

變數,編譯器是容許我們這麼做的,因為它符合logical constness主張,呵呵,好了,現在對mutable了解

了吧?請記住:

■ mutable修飾的類成員變數的值可以在同乙個類的const成員函式中被修改.

mutable關鍵字解析

c 11引入mutable關鍵字,它是乙個型別修飾符,用來修飾成員變數或者是lambda函式,接下來分布來說明。當mutable用來修飾成員變數時,表明該成員變數屬於物件內部可變狀態,對外不可見。即使在const函式也可改變,不影響外部使用者對此const函式的邏輯語義。比如,基於mutex的執行緒...

c 中mutable關鍵字

mutalbe的中文意思是 可變的,易變的 跟constant 既c 中的const 是反義詞。在c 中,mutable也是為了突破const的限制而設定的。被mutable修飾的變數,將永遠處於可變的狀態,即使在乙個const函式中。我們知道,如果類的成員函式不會改變物件的狀態,那麼這個成員函式一...

mutable關鍵字的用法

關鍵字mutable是c 中乙個不常用的關鍵字,他只能用於類的非靜態和非常量資料成員 我們知道乙個物件的狀態由該物件的非靜態資料成員決定,所以隨著資料成員的改變,對像的狀態也會隨之發生變化 如果乙個類的成員函式被宣告為const型別,表示該函式不會改變物件的狀態,也就是 該函式不會修改類的非靜態資料...