您好,登錄后才能下訂單哦!
這篇文章主要介紹了C++中mutable有什么用,具有一定借鑒價值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。
代碼編譯運行環境:VS2017+Win32+Debug
mutalbe的中文意思是“可變的,易變的”,是constant(即C++中的const)的反義詞。在C++中,mutable也是為了突破const的限制而設置的,被mutable修飾的變量將永遠處于可變的狀態。
mutable的作用有兩點:
(1)保持常量對象中大部分數據成員仍然是“只讀”的情況下,實現對個別數據成員的修改;
(2)使類的const函數可以修改對象的mutable數據成員。
使用mutable的注意事項:
(1)mutable只能作用于類的非靜態和非常量數據成員。
(2)在一個類中,應盡量或者不用mutable,大量使用mutable表示程序設計存在缺陷。
示例代碼如下:
#include <iostream> using namespace std; //mutable int test;//編譯出錯 class Student { string name; mutable int getNum; //mutable const int test; //編譯出錯 //mutable static int static1;//編譯出錯 public: Student(char* name) { this->name=name; getNum=0; } string getName() const { ++getNum; return name; } void pintTimes() const { cout<<getNum<<endl; } }; int main(int argc, char* argv[]) { const Student s("張三"); cout<<s.getName().c_str()<<endl; s.pintTimes(); return 0; }
程序輸出結果:
張三
1
mutable不能修飾const數據成員容易理解,因為mutable與const本是反義,同時修飾不是自相矛盾嗎。mutable不能修飾static數據成員,因為static數據成員存儲在Data段或BSS段,屬于類,不屬于類對象,那么常對象和常函數可以對其任意地修改,所以類的static數據成員根本不需要mutable的修飾,但對于常對象的數據成員則不可以被修改,若想修改,則需要mutable的修飾。示例代碼如下:
#include <iostream> using namespace std; class Student { string name; public: static int test1; void modify() const { test1=15; cout<<test1<<endl; } }; int Student::test1;//申明test1并按照編譯器默認的值進行初始化 int main(int argc, char* argv[]) { const Student s("張三"); s.test1=5;//常對象可以修改靜態類的數據成員test1 cout<<Student::test1<<endl; s. modify();//常函數修改 return 0; }
程序輸出結果是:
5
15
感謝你能夠認真閱讀完這篇文章,希望小編分享C++中mutable有什么用內容對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,遇到問題就找億速云,詳細的解決方法等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。