0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

C++中mutable關鍵字詳解與實戰(zhàn)

Android編程精選 ? 來源:編程學習總站 ? 作者:寫代碼的牛頓 ? 2021-09-10 09:23 ? 次閱讀

mutable關鍵字詳解與實戰(zhàn)

C++中mutable關鍵字是為了突破const關鍵字的限制,被mutable關鍵字修飾的成員變量永遠處于可變的狀態(tài),即使是在被const修飾的成員函數(shù)中。

在C++中被const修飾的成員函數(shù)無法修改類的成員變量,成員變量在該函數(shù)中處于只讀狀態(tài)。然而,在某些場合我們還是需要在const成員函數(shù)中修改成員變量的值,被修改的成員變量與類本身并無多大關系,也許你會說,去掉函數(shù)的const關鍵字就行了??蓡栴}是,我只想修改某個變量的值,其他變量希望仍然被const關鍵字保護。

現(xiàn)在有個場景,我們想獲取函數(shù)被調用的次數(shù),代碼如下:

class Widget{ public: Widget(); ~Widget() = default; int getValue() const; int getCount() const; private: int value; int count; };

這里我們想要獲取getValue函數(shù)被調用次數(shù),普遍的做法是在getValue函數(shù)里對成員變量count進行加1處理,可是getValue被關鍵字const修飾啊,無法修改count的值。這個時候mutable派上用場了!我們用mutable關鍵字修飾count,完整代碼如下:

#include 《iostream》 class Widget{ public: Widget(); ~Widget() = default; int getValue() const; int getCount() const; private: int value; mutable int count; }; Widget::Widget() : value(1), count(0) { } int Widget::getValue() const{ count++; return value; } int Widget::getCount() const{ return count; } int main() { Widget w1; for(int i = 0; i 《 5; i++){ w1.getValue(); } std::cout 《《 w1.getCount() 《《 std::endl; return 0; }

被mutable修飾的成員變量count在getValue函數(shù)里進行加1計數(shù),編譯運行輸出如下:

5

既保護了其他成員變量,又能達到我們單獨修改成員變量count值的目的。

責任編輯:haq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴

原文標題:C++ mutable關鍵字如何使用?

文章出處:【微信號:AndroidPush,微信公眾號:Android編程精選】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    C語言和C++結構體的區(qū)別

    同樣是結構體,看看在C語言和C++中有什么區(qū)別?
    的頭像 發(fā)表于 10-30 15:11 ?101次閱讀

    C語言關鍵字--typedef

    C語言關鍵字使用方法學習指南!
    的頭像 發(fā)表于 10-07 12:44 ?152次閱讀

    使用邊緣AI和Sitara處理器進行關鍵字檢測

    電子發(fā)燒友網(wǎng)站提供《使用邊緣AI和Sitara處理器進行關鍵字檢測.pdf》資料免費下載
    發(fā)表于 09-02 11:30 ?0次下載
    使用邊緣AI和Sitara處理器進行<b class='flag-5'>關鍵字</b>檢測

    C++實現(xiàn)類似instanceof的方法

    函數(shù),可實際上C++沒有。但是別著急,其實C++中有兩種簡單的方法可以實現(xiàn)類似Java的instanceof的功能。 在 C++
    的頭像 發(fā)表于 07-18 10:16 ?499次閱讀
    <b class='flag-5'>C++</b><b class='flag-5'>中</b>實現(xiàn)類似instanceof的方法

    快速掌握C語言關鍵字

    C語言中的32個關鍵字你知道多少個呢?根據(jù)關鍵字的作用分為四類:數(shù)據(jù)類型關鍵字、控制語句關鍵字、存儲類型
    的頭像 發(fā)表于 07-06 08:04 ?284次閱讀
    快速掌握<b class='flag-5'>C</b>語言<b class='flag-5'>關鍵字</b>

    inline關鍵字被優(yōu)化導致此類函數(shù)被布局在flash內,怎么處理?

    問題解決。 但是,希望樂鑫官方把idf內源碼的inline關鍵詞都替換為__attribute((always_inline)),因為inline關鍵字不可靠! 期待下次idf版本更新能解決此bug,自己修改idf源碼真的是權
    發(fā)表于 06-21 12:03

    嵌入式C語言面試大挑戰(zhàn)

    C++static關鍵字除了具有C的作用還有在類的使用在類
    發(fā)表于 03-05 14:18 ?274次閱讀
    嵌入式<b class='flag-5'>C</b>語言面試大挑戰(zhàn)

    簡單總結一下嵌入式C++中常見的錯誤形式

    對于 C++ 類,一些關鍵字只要寫在 .h 中就好,cpp 中就不用再加上了,比如 virtual、static 等關鍵字,如果在 cpp 多寫,編譯器會報錯。
    的頭像 發(fā)表于 02-23 09:40 ?415次閱讀

    關鍵字搜索文件夾某個TXT文件

    文件夾隨時創(chuàng)造TXT文件,如何及時選出剛創(chuàng)造的文件?或關鍵字搜索出需要的TXT文件?
    發(fā)表于 02-06 15:22

    在NVM和本地\"內存定義數(shù)組(靜態(tài) /global /local)的\"關鍵字是什么?

    在 NVM 和本地\"內存定義數(shù)組(靜態(tài) /global /local)的\"關鍵字是什么? 還有與 32 位對齊的關鍵字怎么樣。
    發(fā)表于 01-25 07:52

    C++簡史:C++是如何開始的

    的 MISRA C++:2023 博客系列的第二部分。 在這篇博客,我們將深入探討 C++ 的歷史、編程語言多年來的發(fā)展歷程以及它的下一步發(fā)展方向。
    的頭像 發(fā)表于 01-11 09:00 ?513次閱讀
    <b class='flag-5'>C++</b>簡史:<b class='flag-5'>C++</b>是如何開始的

    探討多線程編程的volatile關鍵字應用

    有時候,我們可能需要在指針類型之間進行轉換,而編譯器會認為這是不安全的操作,從而導致編譯錯誤。使用volatile關鍵字可以告知編譯器,這個類型轉換是有意義的,不應該引發(fā)錯誤。
    發(fā)表于 12-27 13:53 ?398次閱讀

    你還記得這個C語言關鍵字嗎?

    當你使用volatile關鍵字時,你告訴編譯器該變量的值可能會在程序的執(zhí)行過程中被外部因素更改,因此編譯器不應該對該變量的讀寫進行優(yōu)化。下面是一些使用volatile的例子,以及對它們的一些文字描述
    的頭像 發(fā)表于 12-17 08:00 ?325次閱讀
    你還記得這個<b class='flag-5'>C</b>語言<b class='flag-5'>關鍵字</b>嗎?

    C語言和C++那些不同的地方

    ++11標準。根據(jù)不同的標準,它們的功能也會有所不同,但是越新的版本支持的編譯器越少,所以本文在討論的時候使用的C語言標準是C89,C++標準是C++99.我們來介紹
    的頭像 發(fā)表于 12-07 14:29 ?889次閱讀
    <b class='flag-5'>C</b>語言和<b class='flag-5'>C++</b><b class='flag-5'>中</b>那些不同的地方

    vlookup提取關鍵字匹配多個結果

    是它能夠基于關鍵字匹配提取多個結果。 當使用VLOOKUP提取多個結果時,需要遵循以下幾個重要步驟。首先,您需要確保數(shù)據(jù)的組織和結構正確。數(shù)據(jù)應以表格格式排列,左側為關鍵字列,右側為相應的信息列。 首先,讓我們考慮一個實際的例子。假設您有一個大型數(shù)據(jù)集
    的頭像 發(fā)表于 12-01 10:40 ?2282次閱讀