欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++類成員函數(shù)后面加const問題

 更新時間:2022年11月05日 09:05:39   作者:方洪斌  
這篇文章主要介紹了C++類成員函數(shù)后面加const問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

C++類成員函數(shù)后面加const

如果類的成員函數(shù)后面加了const關(guān)鍵字,說明這個函數(shù)是不能改變類中的成員變量的。

如果在編寫該函數(shù)會修改類中的成員變量,編譯時會出錯,并且也提高了程序的可讀性,當(dāng)我們看到函數(shù)后面有const的話就知道這個函數(shù)是不會修改類中數(shù)據(jù)的。

注意:

1、只能加在非靜態(tài)成員函數(shù)后面,加在靜態(tài)成員函數(shù)和普通函數(shù)后面會編譯出錯。

2、【例外】如果一個類中有mutable 修飾的成員變量,此類函數(shù)是可以修改的。

3、【實現(xiàn)】其實就是在該類函數(shù)的this隱式參數(shù)的類型為const。

3、const對象只能調(diào)用此類函數(shù),非const對象沒有這個限制,所以為了讓const對象調(diào)用等多的成員函數(shù),如果一個成員函數(shù)不會修改類中數(shù)據(jù)的話最好在后面加const。

C++const四種用法

一、用const修飾函數(shù)參數(shù)

1、修飾指針,可以防止指針被修改

void test(const ClassA* a)
{
?? ?ClassA **b = &a; //編譯錯誤,對const指針取地址,需要用一個指向const指針的指針指向它
?? ?const ClassA **c = &a; //正確,對const指針取地址,需要用一個指向const指針的指針指向它
?? ?ClassA *d = a; //編譯錯誤,不能將const指針轉(zhuǎn)普通指針
?? ?(*b) = new ClassA();
}
void test2(ClassA *a)
{
?? ?ClassA **b = &a;
?? ?(*b) = new ClassA();
}

2、修飾普通類型,說明這個參數(shù)不應(yīng)該被修改

void test(const int a)
{
?? ??? ?a++; //編譯錯誤
?? ??? ?int* c= &a; //編譯錯誤,不能取地址,否則就具備了改a的能力
?? ??? ?int b = a; ?//不用強(qiáng)轉(zhuǎn)也可以編譯通過,但還是沒能力改a的值?? ??? ?
}

3、修飾引用類型,參數(shù)的值不能被修改, 也就失去了引用類型的效果,但傳遞對象時,可以起到不copy對象的目的。

void test(const int& a)
{
?? ?a = 2; //編譯錯誤,不能修改const引用類型的值
}
void test(const ClassA& a) //傳遞的時候,不需要copy一個新的ClassA,又能保護(hù)a
{
?? ?
}

二、用const修飾局部或全局變量

功能類似函數(shù)參數(shù)

三、用const修飾函數(shù)返回值

說明函數(shù)的返回類型是const的,功能類似于函數(shù)參數(shù)

const int test()
{
?? ?int a = 1;
?? ?return a;
}

四、用const修飾函數(shù)

說明函數(shù)不會修改成員變量的值

class ClassA
{
public:
?? ?int b;
?? ?int test() const
?? ?{
?? ??? ?b = 3; //編譯錯誤,const修飾的函數(shù)不能修改類成員變量的值
?? ??? ?return b;
?? ?}
}

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • C++關(guān)于const與引用的分析講解

    C++關(guān)于const與引用的分析講解

    Const?是C++中常用的類型修飾符,常類型是指使用類型修飾符const說明的類型,常類型的變量或?qū)ο蟮闹凳遣荒鼙桓碌?,引用變量是一個別名,也就是說,它是某個已存在變量的另一個名字。一旦把引用初始化為某個變量,就可以使用該引用名稱或變量名稱來指向變量
    2022-04-04
  • 解析C++中多層派生時的構(gòu)造函數(shù)及一些特殊形式

    解析C++中多層派生時的構(gòu)造函數(shù)及一些特殊形式

    這篇文章主要介紹了解析C++中多層派生時的構(gòu)造函數(shù)及一些特殊形式,特殊形式主要針對基類和子對象類型的構(gòu)造函數(shù)內(nèi)容,需要的朋友可以參考下
    2015-09-09
  • C/C++實現(xiàn)高并發(fā)http服務(wù)器的代碼示例

    C/C++實現(xiàn)高并發(fā)http服務(wù)器的代碼示例

    這篇文章簡單給大家介紹了C/C++實現(xiàn)高并發(fā)http服務(wù)器的代碼示例,文章通過代碼和圖文介紹的非常詳細(xì),感興趣的同學(xué)可以參考閱讀
    2023-07-07
  • C語言實現(xiàn)密碼本小項目

    C語言實現(xiàn)密碼本小項目

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)密碼本小項目,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • C語言函數(shù)超詳細(xì)講解下篇

    C語言函數(shù)超詳細(xì)講解下篇

    函數(shù)是一組一起執(zhí)行一個任務(wù)的語句。每個?C?程序都至少有一個函數(shù),即主函數(shù)?main()?,所有簡單的程序都可以定義其他額外的函數(shù),函數(shù)我們分兩篇來講解,接下來開始第二篇
    2022-04-04
  • QT中窗口關(guān)閉自動銷毀的實現(xiàn)示例

    QT中窗口關(guān)閉自動銷毀的實現(xiàn)示例

    這篇文章主要介紹了QT中窗口關(guān)閉自動銷毀,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • 如何利用C++實現(xiàn)mysql數(shù)據(jù)庫的連接池詳解

    如何利用C++實現(xiàn)mysql數(shù)據(jù)庫的連接池詳解

    為了提高M(jìn)ySQL數(shù)據(jù)庫的訪問的瓶頸,除了在服務(wù)器端增設(shè)緩存服務(wù)器緩存常用的數(shù)據(jù)之外(如redis),還可以增加數(shù)據(jù)庫連接池,來提高M(jìn)ySQL Server的訪問效率,這篇文章主要給大家介紹了關(guān)于如何利用C++實現(xiàn)mysql數(shù)據(jù)庫的連接池的相關(guān)資料,需要的朋友可以參考下
    2021-07-07
  • C語言 strcpy和memcpy區(qū)別詳細(xì)介紹

    C語言 strcpy和memcpy區(qū)別詳細(xì)介紹

    這篇文章主要介紹了C語言 strcpy和memcpy區(qū)別詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • 基于樹莓派的語音機(jī)器人

    基于樹莓派的語音機(jī)器人

    這篇文章主要為大家詳細(xì)介紹了基于樹莓派的語音機(jī)器人,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • 提升編程能力的C語言技巧總結(jié)

    提升編程能力的C語言技巧總結(jié)

    這篇文章主要為大家總結(jié)了一些C語言技巧的相關(guān)資料,可以幫助大家大大提升編程能力。文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-12-12

最新評論