mutable關鍵字解析

2022-04-16 07:36:43 字數 1053 閱讀 1579

c++11引入mutable關鍵字,它是乙個型別修飾符,用來修飾成員變數或者是lambda函式,接下來分布來說明。

mutable用來修飾成員變數時,表明該成員變數屬於物件內部可變狀態,對外不可見。即使在const函式也可改變,不影響外部使用者對此const函式的邏輯語義。比如,基於mutex的執行緒安全佇列。

class queue

private:

// 一定要加`mutable`修飾,否則會編譯出錯。

mutable std::mutex mutex_;

};

在上述例子中,empty函式用來判斷當前佇列是否為空,從語義上看,該函式不會改變佇列內部元素個數,加上const修飾,向編譯器明確明該語義。由於內部訪問了佇列,因此需要加鎖,加鎖這個動作會改變鎖狀態,這和const的語義有衝突,不增加mutable修飾該鎖變數,會編譯失敗,因此標準引入mutable修飾符,宣告該變數是始終可修改的。

當它用來修飾lambda函式時,可在lambda函式體內修改外部的拷貝入參,例項如下:

int x;

auto f1 = [x]() mutable;

auto f2 = [x]() ; // 編譯出錯

auto f3 = [&x]() ; // 編譯通過

編譯f2會觸發編譯錯誤,提示無法在非可變lambda中修改通過複製捕獲。對此函式加上mutable,使得該匿名函式支援修改拷貝入參。

注意,通過拷貝傳參時,lambda函式內部對該引數的修改不會影響外部值。如果是傳引用,可不加mutable

c 關鍵字mutable深入解析

1 關於mutable關鍵字 先說用法,mutable關鍵字只能修飾非靜態以及非常量成員變數,使用muwww.cppcns.comtable修www.cppcns.com飾的成員變數在const函式中的值是可以修改的。比如說下面的 複製 如下 class de程式設計客棧mo demo public...

關鍵字mutable小議

關鍵字mutable小議 內容 我們知道在用const修飾的類成員函式,這意味著什麼,從effective c 這本書上我們可以了解到,這裡存在兩個流行的概念 bitwise constness or physical constness 和logical constness.bitwise con...

深入解析C 中的mutable關鍵字

在c 中,mutable也是為了突破const的限制而設定的。被mutable修飾的變數,將永遠處於可變的狀態,即使在乙個const函式中 mutalbe的中文意思是 可變的,易變的 跟constant 既c 中的const 是反義詞。在c 中,mutable也是為了突破const的限制而設定的。被...