一级日韩免费大片,亚洲一区二区三区高清,性欧美乱妇高清come,久久婷婷国产麻豆91天堂,亚洲av无码a片在线观看

C語(yǔ)言

c++中const關(guān)鍵字

時(shí)間:2025-01-25 11:33:51 C語(yǔ)言 我要投稿
  • 相關(guān)推薦

c++中const關(guān)鍵字

  const是一個(gè)C++語(yǔ)言的限定符,它限定一個(gè)變量不允許被改變。使用const在一定程度上可以提高程序的安全性和可靠性。下面是小編分享的c++中const關(guān)鍵字,一起來(lái)看一下吧。


  define與const的區別

  1.define作用在預處理時(shí),是簡(jiǎn)單地字符替換

  2. const作用在編譯時(shí),具有類(lèi)型檢查的功能

  3. const必須進(jìn)行初始化

  常量指針與指針常量

  #include <iostream>

  using std::endl;

  using std::cout;

  int main()

  {

  int a = 100;

  const int *pa = &a;

  int * const pb = &a;

  return 0;

  }

  小結:

  const int *pa = &a;-->常量指針

  可以改變指針指向,不能改變所指變量的值。

  int * const pb = &a;

  不能改變指針指向,可以改變所指變量的值。

  C/C++中CONST用法總結

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

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

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

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

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

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

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

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

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

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

  const修飾類(lèi)對象時(shí),其對象中的任何成員都不能被修改。const修飾的對象,該對象的任何非const成員函數都不能調用該對象,因為任何非const成員函數都會(huì )有修改成員變量的可能。

  class TEMP{

  void func1();

  void func2() const;

  }

  const TEMP temp;

  temp.func1(); //錯誤;

  temp.func2(); //正確;

  4、const修飾成員變量:

  const修飾的成員變量不能被修改,同時(shí)只能在初始化列表中被初始化,因為常量只能被初始化,不能被賦值;

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

  class TEMP{

  const int val;

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

  }

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

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

  如果某個(gè)成員函數不會(huì )修改成員變量,那么最好將其聲明為const,因為const成員函數不會(huì )對數據進(jìn)行修改,如果修改,編譯器將會(huì )報錯;

  class TEMP{

  void func()const; //常成員函數,不能修改對象中的成員變量,也不能調用類(lèi)中任何非const成員函數;

  }

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

  6、const在函數聲明中的使用:

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

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

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

  7、const常量與define宏定義的區別:

  1)處理階段不同:

  define是在預處理階段,define常量從未被編譯器看見(jiàn),因為在預處理截斷就已經(jīng)替換了;

  const常量在編譯階段使用。

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

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

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

  3)存儲方式不同

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

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

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

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

  class ST {

  public:

  int a;

  mutable int showCount;

  void Show()const;

  };

  void ST::Show()const{

  //a=1;//錯誤,不能在const成員函數中修改普通變量

  showCount++;//正確

  }

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

  9、const_cast:

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

  用法:

 。篶onst_cast<type_id> (expression)

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

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

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

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

  建議:

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

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

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

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


【c++中const關(guān)鍵字】相關(guān)文章:

C++ 中const和復合類(lèi)型08-07

c++ const引用與非const引用09-15

C語(yǔ)言關(guān)鍵字const用法09-06

C語(yǔ)言關(guān)鍵字const的使用09-02

總結C語(yǔ)言中const關(guān)鍵字的使用08-22

C語(yǔ)言關(guān)鍵字:auto、static、register、const08-06

register關(guān)鍵字在c語(yǔ)言和c++中的差異09-23

C++中const-cast與reinterpret-cast運算符的用法10-22

C語(yǔ)言中Static和Const關(guān)鍵字的作用09-23

一级日韩免费大片,亚洲一区二区三区高清,性欧美乱妇高清come,久久婷婷国产麻豆91天堂,亚洲av无码a片在线观看