在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<abbr id="27omo"></abbr>

<menu id="27omo"><dl id="27omo"></dl></menu>
    • <label id="27omo"><tt id="27omo"></tt></label>

      新聞中心

      EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > C++中const與指針、引用的分析

      C++中const與指針、引用的分析

      作者: 時(shí)間:2016-12-01 來源:網(wǎng)絡(luò) 收藏

      int num = 10;

      int &newname = num;
      const int &othername = num;

      引用主要是上面的兩種,這兩種的區(qū)別相對(duì)來說比較大,而且加入了const限定符以后,引用的能力往往變的更加的強(qiáng)大。
      一般來說對(duì)于const對(duì)象而言,一般只能采用const引用,這與前面的const對(duì)象只能采用指向const對(duì)象的原因是一樣的,如果對(duì)引用沒有進(jìn)行限定,可能會(huì)通過引用修改數(shù)據(jù),這是不允許的。也就是說const引用與指向const對(duì)象的指針有一定的相似性,即不能通過這個(gè)引用或者指針來修改原來的數(shù)據(jù)。保證數(shù)據(jù)的const特性。也就是說非const引用不能引用const對(duì)象,如果不小心引用編譯器會(huì)出現(xiàn)下面的錯(cuò)誤:

      invalid initialization of reference of type ‘int&’ from expression of type ‘const int’

      因此非const引用只能針對(duì)非const的同類型數(shù)據(jù)。這是需要注意的。比如string,和字符串字面值都不能直接引用。因?yàn)轭愋筒幌嗤@是在C++函數(shù)定義中經(jīng)常出現(xiàn)的問題,在后期的博文中再分析。在引用中加入const的就是對(duì)于這個(gè)引用而言,不能通過自己來修改原始的數(shù)據(jù),這與指向const的指針有很大的相似性,

      但是往往const引用的初始化并不一定要去對(duì)象是const的,甚至可以是不同類型的對(duì)象,這種優(yōu)越性是連指針(指針只能指向同一類型的數(shù)據(jù),如果一定要指向需要強(qiáng)制類型轉(zhuǎn)換)都沒有的,也就是可以將不同類型的非const或者const對(duì)象來初始化一個(gè)const引用。但是這個(gè)const限定符就限定了該引用指向的對(duì)象是不能通過該引用來修改的。如果嘗試采用const的引用進(jìn)行修改,編譯器會(huì)出現(xiàn)如下的錯(cuò)誤:

      error: assignment of read-only reference...

      綜合上面的描述可知:非const引用只能綁定到該引用同類型(string和字符串字面值(const char *)之間都不可以)的非const對(duì)象,而const引用則可以綁定到任意的一種對(duì)象上(非const、const、甚至不同類型),這種差別在函數(shù)的參數(shù)中有較大的體現(xiàn)。
      通過下面的例子來說明一下上面的分析:

      #include
      #include
      #include

      using namespace std;

      int main()
      {
      int num = 20;
      const int array_size = 10;

      int &pnum = num;
      const int &cpnum = num;
      /*采用引用直接初始化const類型的引用*/
      const int &csize1 = pnum;

      /*const的變量不能采用非const的引用*/
      //int &psize = array_size;
      /*const類型數(shù)據(jù)只能采用指向const的指針來指向*/
      const int &csize = array_size;

      cout << "Before change..." << endl;
      cout << "The num of num = " << num << endl;
      cout << "pnum = " << pnum << " "
      << "cpnum = " << cpnum << " "
      << "csize1 = " << csize1 << endl;

      num = 30;
      cout << "After the first changed..." << endl;
      cout << "The num of num = " << num << endl;
      cout << "pnum = " << pnum << " "
      << "cpnum = " << cpnum << " "
      << "csize1 = " << csize1 << endl;

      /*通過引用修改變量的值*/
      pnum = 40;
      cout << "After the second changed..." << endl;
      cout << "The num of num = " << num << endl;
      cout << "pnum = " << pnum << " "
      << "cpnum = " << cpnum << " "
      << "csize1 = " << csize1 << endl;

      /*不能采用const的引用修改對(duì)象,
      *這與指向const的指針特性的相似處*/
      /*
      csize1 = 50;
      cout << "After the second changed..." << endl;
      cout << "The num of num = " << num << endl;
      cout << "pnum = " << pnum << " "
      << "cpnum = " << cpnum << " "
      << "csize1 = " << csize1 << endl;
      */

      double dnum = 10.1;
      /*非const的引用只能綁定相同類型的對(duì)象*/
      //int &dname = dnum;

      /******************************************
      *const引用可以綁定不同類型的對(duì)象,
      *因此const引用就能更加方便的作為函數(shù)的形參
      *******************************************/
      const int &dothername = dnum;

      return 0;
      }


      上面的實(shí)驗(yàn)結(jié)果基本上符合分析的結(jié)論。

      總結(jié)
      const的使得引用與指針的變化更加復(fù)雜,總體而言,const主要是保證了通過指針或者引用不修改原始的數(shù)據(jù),但是至于原始的數(shù)據(jù)是否可以修改,這就需要參看數(shù)據(jù)的類型。
      在存在const的對(duì)象中,只能采用包含限定符const的引用或者指向const的指針來操作。
      const的引用比較強(qiáng)大,初始化的過程中可以采用任意的對(duì)象,const對(duì)象,非const對(duì)象,甚至其他類型的數(shù)據(jù)。const引用支持隱式類型轉(zhuǎn)換。而指向const的指針則不能,只能指向同一類型的數(shù)據(jù),但是可以采用強(qiáng)制類型轉(zhuǎn)換,初始化或者賦值過程中對(duì)數(shù)據(jù)類型沒有要求,可以是const對(duì)象的地址,也可以是非const對(duì)象的地址。
      const引用和指向const對(duì)象的指針都是自己以為自己指向的對(duì)象是不能修改的,采用const的指針或者引用就能避免原始數(shù)據(jù)修改。


      上一頁 1 2 下一頁

      關(guān)鍵詞: C++const指針引

      評(píng)論


      相關(guān)推薦

      技術(shù)專區(qū)

      關(guān)閉