最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C/C++中CONST用法總結(jié)(推薦)

 更新時(shí)間:2017年07月07日 14:23:49   作者:浩渣  
這篇文章主要介紹了C/C++中CONST用法總結(jié)(推薦),包括const常量與define宏定義的區(qū)別介紹,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧

1、修飾常量時(shí):

const int temp1; //temp1為常量,不可變
  int const temp2; //temp2為常量,不可變

2、修飾指針時(shí):

  主要看const在*的前后,在前則指針指向的內(nèi)容為常量,在后則指針本身為常量;

const int *ptr;  //*ptr為常量;
  int const *ptr;  //*ptr為常量;
  int* const ptr;  //ptr為常量;
  const int * const ptr;  //*ptr、ptr均為常量;

3、const修飾類(lèi)對(duì)象時(shí):

  const修飾類(lèi)對(duì)象時(shí),其對(duì)象中的任何成員都不能被修改。const修飾的對(duì)象,該對(duì)象的任何非const成員函數(shù)都不能調(diào)用該對(duì)象,因?yàn)槿魏畏莄onst成員函數(shù)都會(huì)有修改成員變量的可能。

class TEMP{
    void func1();
    void func2() const;
  }
  const TEMP temp;
  temp.func1(); //錯(cuò)誤;
  temp.func2(); //正確;

4、const修飾成員變量:

  const修飾的成員變量不能被修改,同時(shí)只能在初始化列表中被初始化,因?yàn)槌A恐荒鼙怀跏蓟?,不能被賦值;

  賦值是使用新值覆蓋舊值構(gòu)造函數(shù)是先為其開(kāi)辟空間然后為其賦值,不是初始化;而初始化列表開(kāi)辟空間和初始化是同時(shí)完成的,直接給與一個(gè)值,所以const成員變量一定要在初始化列表中完成。

class TEMP{
    const int val;      
    TEMP(int x)val(x){};  //只能在初始化列表中賦值;
  }

5、const修飾類(lèi)的成員函數(shù)

  const成員函數(shù)表示該成員函數(shù)不能修改類(lèi)對(duì)象中的任何非const成員變量。一般const寫(xiě)在函數(shù)的后面,形如:void func() const;

  如果某個(gè)成員函數(shù)不會(huì)修改成員變量,那么最好將其聲明為const,因?yàn)閏onst成員函數(shù)不會(huì)對(duì)數(shù)據(jù)進(jìn)行修改,如果修改,編譯器將會(huì)報(bào)錯(cuò);

class TEMP{
    void func()const; //常成員函數(shù),不能修改對(duì)象中的成員變量,也不能調(diào)用類(lèi)中任何非const成員函數(shù);
  }

  對(duì)于const類(lèi)對(duì)象,只能調(diào)用類(lèi)中的const成員函數(shù),所以const修飾成員函數(shù)的作用主要就是限制對(duì)const對(duì)象的使用。

6、const在函數(shù)聲明中的使用:

  在函數(shù)聲明中,const可以修飾函數(shù)的返回值,也可以修飾具體某一個(gè)形參;

  修飾形參時(shí),用相應(yīng)的變量初始化const常量,在函數(shù)體內(nèi),按照const所修飾的部分進(jìn)行常量化;

  修飾函數(shù)返回值時(shí),一般情況下,const修飾返回值多用于操作符的重載。通常不建議用const修飾函數(shù)的返回值類(lèi)型為某個(gè)對(duì)象或某個(gè)對(duì)象引用的情況;

7、const常量與define宏定義的區(qū)別:

  1)處理階段不同:

  define是在預(yù)處理階段,define常量從未被編譯器看見(jiàn),因?yàn)樵陬A(yù)處理截?cái)嗑鸵呀?jīng)替換了;

  const常量在編譯階段使用。

  2)類(lèi)型和安全檢查不同

  define沒(méi)有類(lèi)型,不做任何檢查,僅僅是字符替換,沒(méi)有類(lèi)型安全檢查,并且在字符替換時(shí)可能會(huì)產(chǎn)生意料不到的錯(cuò)誤

  const常量有明確的類(lèi)型,在編譯階段會(huì)進(jìn)行類(lèi)型檢查;

  3)存儲(chǔ)方式不同

  define是字符替換,有多少地方使用,就會(huì)替換多少次,不會(huì)分配內(nèi)存;

  編譯器通常不會(huì)為const常量分配空間,只是將它們保存在符號(hào)表內(nèi),使他們成為一個(gè)編譯期間的一個(gè)常量,沒(méi)有讀取內(nèi)存的操作,效率也很高;

8、mutable關(guān)鍵字:

  在C++中,mutable是為了突破const的限制而設(shè)置的。被mutable修飾的變量,將永遠(yuǎn)處于可變的狀態(tài),即使在一個(gè)const函數(shù)中,甚至結(jié)構(gòu)體變量或者類(lèi)對(duì)象為const,其mutable成員也可以被修改:

class ST { 
    public:
    int a; 
    mutable int showCount; 
    void Show()const; 
  };
  void ST::Show()const{ 
    //a=1;//錯(cuò)誤,不能在const成員函數(shù)中修改普通變量 
    showCount++;//正確 
  }

  mutable只能修飾非靜態(tài)數(shù)據(jù)成員;

9、const_cast:

  用于修改類(lèi)型的const或volatile屬性。

  用法:

:const_cast<type_id> (expression)

  該運(yùn)算符用來(lái)修改類(lèi)型的const或volatile屬性。除了const 或volatile修飾之外, type_id和expression的類(lèi)型是一樣的。

  1)常量指針被轉(zhuǎn)化成非常量的指針,并且仍然指向原來(lái)的對(duì)象;

  2)常量引用被轉(zhuǎn)換成非常量的引用,并且仍然指向原來(lái)的對(duì)象;

  3)const_cast一般用于修改底指針。如const char *p形式。
 
建議:

  1、應(yīng)該盡可能使用const,它會(huì)允許你指定一個(gè)語(yǔ)義約束(也就是指定一個(gè)不能被改動(dòng)的對(duì)象),而編譯器會(huì)強(qiáng)制實(shí)施這項(xiàng)約束。它允許你告訴編譯器和其他程序員某值應(yīng)該保持不變。

  2、將某些東西聲明為const可幫助編譯器偵測(cè)出錯(cuò)誤用法。const可被施加于任何作用域內(nèi)的對(duì)象、函數(shù)參數(shù)、函數(shù)返回類(lèi)型、成員函數(shù)本體;

  3、編譯器強(qiáng)制實(shí)施bitwise constness,但你編寫(xiě)程序時(shí)應(yīng)該使用“概念上的常量性”(conceptual constness);

  4、當(dāng)const和non_const成員函數(shù)有著實(shí)質(zhì)等價(jià)的實(shí)現(xiàn)時(shí),令non-const版本調(diào)用const版本可避免代碼重復(fù);

以上所述是小編給大家介紹的C/C++中CONST用法總結(jié),希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • C/C++函數(shù)參數(shù)傳遞機(jī)制詳解及實(shí)例

    C/C++函數(shù)參數(shù)傳遞機(jī)制詳解及實(shí)例

    這篇文章主要介紹了C/C++函數(shù)參數(shù)傳遞機(jī)制詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • Qt實(shí)現(xiàn)驗(yàn)證碼相關(guān)功能的代碼示例

    Qt實(shí)現(xiàn)驗(yàn)證碼相關(guān)功能的代碼示例

    驗(yàn)證碼的原理基于人類(lèi)視覺(jué)和計(jì)算機(jī)視覺(jué)的差異性,通過(guò)給用戶(hù)顯示一些難以被機(jī)器識(shí)別的圖形或文字,讓用戶(hù)進(jìn)行人機(jī)交互,確認(rèn)自己的身份,這樣可以有效保護(hù)網(wǎng)站安全,所以本給大家介紹了Qt實(shí)現(xiàn)驗(yàn)證碼相關(guān)功能的代碼示例,感興趣的朋友可以參考下
    2024-01-01
  • 深入理解goto語(yǔ)句的替代實(shí)現(xiàn)方式分析

    深入理解goto語(yǔ)句的替代實(shí)現(xiàn)方式分析

    本篇文章是對(duì)goto語(yǔ)句的替代實(shí)現(xiàn)方式進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • 淺析C++中模板的那點(diǎn)事

    淺析C++中模板的那點(diǎn)事

    C++中的模板可分為函數(shù)模板和類(lèi)模板,而把函數(shù)模板的具體化稱(chēng)為模板函數(shù),把類(lèi)模板的具體化成為模板類(lèi)。下面讓我們分別看看什么是函數(shù)模板和類(lèi)模板吧
    2013-09-09
  • C語(yǔ)言基礎(chǔ)野指針與空指針示例分析

    C語(yǔ)言基礎(chǔ)野指針與空指針示例分析

    全網(wǎng)最接地氣的C語(yǔ)言野指針介紹,此處對(duì)于野指針與空指針知識(shí)點(diǎn)做一些簡(jiǎn)要的介紹,作者實(shí)屬初學(xué),難免文章中有內(nèi)容理解不到位或者有不當(dāng)之處,還請(qǐng)朋友們不吝指正,希望大家多多給予支持
    2021-11-11
  • vector, list, map在遍歷時(shí)刪除符合條件的元素實(shí)現(xiàn)方法

    vector, list, map在遍歷時(shí)刪除符合條件的元素實(shí)現(xiàn)方法

    下面小編就為大家?guī)?lái)一篇vector, list, map在遍歷時(shí)刪除符合條件的元素實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-12-12
  • C++入門(mén)之模板基礎(chǔ)講解

    C++入門(mén)之模板基礎(chǔ)講解

    這篇文章主要為大家介紹了C++入門(mén)之模板基礎(chǔ),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2021-11-11
  • 淺析如何在c語(yǔ)言中調(diào)用Linux腳本

    淺析如何在c語(yǔ)言中調(diào)用Linux腳本

    如何在c語(yǔ)言中調(diào)用Linux腳本呢?下面小編就為大家詳細(xì)的介紹一下吧!需要的朋友可以過(guò)來(lái)參考下
    2013-08-08
  • C++ sdl實(shí)現(xiàn)渲染旋轉(zhuǎn)視頻的方法分享

    C++ sdl實(shí)現(xiàn)渲染旋轉(zhuǎn)視頻的方法分享

    一般情況下播放視頻時(shí)不需要旋轉(zhuǎn),但是如果是移動(dòng)端錄制的視頻有時(shí)會(huì)出現(xiàn)rotate參數(shù),且視頻寬高也是互換的。所以本文為大家準(zhǔn)備了利用sdl實(shí)現(xiàn)渲染旋轉(zhuǎn)視頻的方法,需要的可以參考一下
    2022-12-12
  • C++之多態(tài)(內(nèi)容不錯(cuò))

    C++之多態(tài)(內(nèi)容不錯(cuò))

    什么是多態(tài)?顧名思義就是同一個(gè)事物在不同場(chǎng)景下的多種形態(tài),需要的朋友可以參考下
    2020-01-01

最新評(píng)論

凤台县| 蕉岭县| 聂拉木县| 平顶山市| 汉源县| 玛曲县| 辽宁省| 象州县| 岳普湖县| 北辰区| 江孜县| 灌南县| 阜阳市| 渝中区| 得荣县| 精河县| 拉萨市| 滨海县| 伊川县| 新蔡县| 苗栗县| 濉溪县| 确山县| 长汀县| 大理市| 攀枝花市| 武山县| 英超| 大石桥市| 苍溪县| 横峰县| 杨浦区| 如皋市| 屏东县| 宜兴市| 湖北省| 桐柏县| 永善县| 五家渠市| 伽师县| 汶川县|