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

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

3天內(nèi)不再提示

淺談C++的mutable關(guān)鍵字

CHANBAEK ? 來源:明解嵌入式 ? 作者:Sharemaker001 ? 2023-04-15 11:13 ? 次閱讀

C++11中推出了一種特殊的關(guān)鍵字:mutable用于修飾類變量。 它的作用是標注該變量一定會被修改,因此也就不是const類型。 目的是為了使這些成員變量在被const關(guān)鍵字修飾的成員函數(shù)中使用時,可以被修改。

但是我們會發(fā)現(xiàn)一個問題,那就是不使用const修飾的變量本身就是可以修改的,那為什么還要添加mutable關(guān)鍵字呢? 這里涉及到一個用法,也是關(guān)于mutable的最常用的基本用法了。 如果不希望類成員函數(shù)修改類對象的狀態(tài),那么這個成員函數(shù)一般會被const修飾,修飾成員函數(shù)后就不可以更改成員變量。 如果我們需要在const成員函數(shù)中修改一些與類對象狀態(tài)無關(guān)的成員變量,就可以用mutable來將這些成員變量修改為可變的。
直接看下面這個例子:

#include 
class Car
{
public:
    Car();
    ~Car();
    int getPrice() const; /*調(diào)用方法  const成員函數(shù)*/
    int getLen() const; /*調(diào)用方法 const成員函數(shù)*/
private:
    int m_carPrice;
    int m_carLen;
    mutable int m_carNum;            
};


Car::Car()
{
    m_carPrice = 50000;
    m_carLen = 5;
    m_carNum = 5;
}

Car::~Car()
{
}


int Car::getPrice() const
{
    m_carNum++;    //此處修改是可以,因為對m_carNum進行了mutable限定
    std::cout << m_carPrice  << std::endl;
    return m_carPrice ; // 無法修改該成員變量
}


int Car::getLen() const
{
    return m_carLen; // 無法修改該成員變量
}

可以看到,在C++中被const修飾的成員函數(shù)無法修改類的成員變量,成員變量在該函數(shù)中處于只讀狀態(tài)。 然而,在某些場合我們還是需要在const成員函數(shù)中修改成員變量的值,被修改的成員變量與類本身并無多大關(guān)系,也許你會說,去掉函數(shù)的const關(guān)鍵字就行了。 可問題是,我只想修改某個變量的值,其他變量希望仍然被const關(guān)鍵字保護。 這樣做相當于在函數(shù)中給mutable變量開了特例。

簡單理解,在C++中,mutable就是為了突破成員函數(shù) const的限制,可以在const函數(shù)里面來修改被mutable修飾的成員變量。 即使在一個const函數(shù)中,被mutable修飾的變量,將永遠處于可變的狀態(tài)。 這樣,既保護了其他成員變量,又能達到我們單獨修改成員變量count值的目的。

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

    關(guān)注

    3

    文章

    4277

    瀏覽量

    62323
  • C++
    C++
    +關(guān)注

    關(guān)注

    21

    文章

    2100

    瀏覽量

    73453
  • 變量
    +關(guān)注

    關(guān)注

    0

    文章

    613

    瀏覽量

    28306
  • 關(guān)鍵字
    +關(guān)注

    關(guān)注

    0

    文章

    37

    瀏覽量

    6889
  • CONST
    +關(guān)注

    關(guān)注

    0

    文章

    43

    瀏覽量

    8142
收藏 人收藏

    評論

    相關(guān)推薦

    C語言關(guān)鍵字const的幾種用法

    本期來講解一個C語言的關(guān)鍵字——const。
    發(fā)表于 06-21 11:05 ?1538次閱讀
    <b class='flag-5'>C</b>語言<b class='flag-5'>關(guān)鍵字</b>const的幾種用法

    C++中常用關(guān)鍵字詳解(2)

    C++中,volatile是一個關(guān)鍵字,用于修飾變量,告訴編譯器該變量的值可能在程序流程之外被意外修改,因此編譯器不應該對該變量進行優(yōu)化(如緩存變量值或重排指令順序)。
    發(fā)表于 08-08 16:15 ?300次閱讀

    C++筆記010:C++C的擴展——register關(guān)鍵字增強

    的地址在C語言里面是會出錯的。同樣的代碼我們放到C++編譯環(huán)境下,發(fā)現(xiàn)編譯是通過的!在C++中依然支持register關(guān)鍵字,C++編譯器有
    發(fā)表于 08-11 12:34

    C語言volatile關(guān)鍵字詳解 精選資料分享

    1.volatile和什么有關(guān)百度翻譯是這樣子翻譯volatile的:圖1-1 百度翻譯volatile截圖volatile屬于C語言的關(guān)鍵字,《C Primer Puls》 是這樣解釋關(guān)鍵字
    發(fā)表于 07-22 07:20

    標準C語言總共有32個關(guān)鍵字

    標準C語言總共有32個關(guān)鍵字
    發(fā)表于 01-12 15:59 ?0次下載

    C++語言基礎(chǔ)講解視頻標識符與關(guān)鍵字

    C++語言基礎(chǔ)講解視頻標識符與關(guān)鍵字,喜歡的朋友可以下載來學習。
    發(fā)表于 01-14 15:31 ?7次下載

    C語言32個關(guān)鍵字

    C語言32個關(guān)鍵字,感興趣的小伙伴們可以看看。
    發(fā)表于 07-26 16:29 ?66次下載

    C51的符號和五大語句及關(guān)鍵字等詳細資料說明

    本文檔的主要內(nèi)容詳細介紹的是C51的符號和五大語句及關(guān)鍵字等詳細資料說明包括了:C語言 基本標點符號,函數(shù)書寫格式與函數(shù)調(diào)用,單片機五大語句與32個C語言
    發(fā)表于 12-11 17:34 ?31次下載
    <b class='flag-5'>C</b>51的符號和五大語句及<b class='flag-5'>關(guān)鍵字</b>等詳細資料說明

    C++C的const關(guān)鍵字有何差別?

    C++C中的const關(guān)鍵字有何差別?
    的頭像 發(fā)表于 02-03 14:51 ?1776次閱讀

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

    mutable關(guān)鍵字詳解與實戰(zhàn) 在C++mutable關(guān)鍵字是為了突破const關(guān)鍵字的限制,
    的頭像 發(fā)表于 09-10 09:23 ?5517次閱讀

    C++中的const關(guān)鍵字介紹

    前一篇文章我們主要介紹了C++中的復合類型引用和指針,這篇文章我們將會主要介紹C++中const關(guān)鍵字。有時候我們想定義一個值不能被改變的變量,例如我們想使用一個變量存儲buffer的大小,如果我們不希望這個值被改變,那么我們就
    的頭像 發(fā)表于 03-17 14:01 ?617次閱讀

    const關(guān)鍵字應用總結(jié)

    C++中的const關(guān)鍵字的用法非常靈活,而使用const將大大改善程序的健壯性
    的頭像 發(fā)表于 05-26 09:06 ?535次閱讀

    C語言32個關(guān)鍵字可以分為這幾類

    C語言是一種面向過程、抽象化的通用程序設(shè)計語言,廣泛應用于嵌入式底層和系統(tǒng)開發(fā)。C語言關(guān)鍵字共有32個,根據(jù)用途,可分為四類:第一類:變量數(shù)據(jù)類型關(guān)鍵字:14個第二類:9條基本語句用到
    的頭像 發(fā)表于 12-31 15:28 ?4919次閱讀
    <b class='flag-5'>C</b>語言32個<b class='flag-5'>關(guān)鍵字</b>可以分為這幾類

    快速掌握C語言關(guān)鍵字

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

    C語言關(guān)鍵字--typedef

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