const

 const用法主要是防止定義的對象再次被修改,定義對象變量時要初始化變量

 

下面我就介紹一下幾種常見的用法

1.用於定義常量變量,這樣這個變量在後面就不可以再被修改

 const int Val = 10;

 //Val = 20; //錯誤,不可被修改

 

2. 保護傳參時參數不被修改,如果使用引用傳遞參數或按地址傳遞參數給一個函數,在這個函數裏這個參數的值若被修改,

則函數外部傳進來的變量的值也發生改變,若想保護傳進來的變量不被修改,可以使用const保護

 void  fun1(const int &val)

  {

     //val = 10; //出錯

}

void fun2(int &val)

{

   val = 10; //沒有出錯

}

void main()

{

   int a = 2;

   int b = 2;

   fun1(a); //因爲出錯,這個函數結束時a的值還是2

   fun2(b);//因爲沒有出錯,函數結束時b的值爲10

}

如果只想把值傳給函數,而且這個不能被修改,則可以使用const保護變量,有人會問爲什麼不按值傳遞,按值傳遞還需要把這個值複製一遍,

而引用不需要,使用引用是爲了提高效率//如果按值傳遞的話,沒必要加const,那樣根本沒意義

 

3. 節約內存空間,

 #define  PI  3.14 //使用#define宏

 const double Pi = 3.14 //使用const,這時候Pi並沒有放入內存中

 

 double  a = Pi;  //這時候才爲Pi分配內存,不過後面再有這樣的定義也不會再分配內存

 double  b = PI;  //編譯時分配內存

 double  c = Pi;  //不會再分配內存,

 double  d = PI;  //編譯時再分配內存

const定義的變量,系統只爲它分配一次內存,而使用#define定義的常量宏,能分配好多次,這樣const就很節約空間

 

4.類中使用const修飾函數防止修改非static類成員變量

 class

{

 public:

  void fun() const //加const修飾

   {

     a = 10; //出錯,不可修改非static變量

     b = 10; //對,可以修改

}

 private:

  int  a ;

  static int b;

}

 

5.修飾指針


1)指向常量的指針:

const int *A;    

指向常量的指針(point to const)不能用與改變其所指對象的值,要存放常量對象的地址,只能用指向常量的指針。

注意:1定義並沒有規定指向常量的指針所指向的對象必須是常量,只是要求不能通過該指針改變對象的值。(即指向常量的指針所指對象即可是常量也可以不是常量)     

const double pi=3.14;   //pi是常量

const double *cptr=π


double dval=3.14;       //dval不是常量

const double *cptr=&dval;



2)const 指針:


指針本身是常量,常量指針必須初始化,且值之後不能修改。


int num=0;

int *const curptr=#              //curptr將一直指向num,不可修改其值(地址)


3)頂層const與底層const

區別在於,頂層const表示的對象本身是常量,底層const表示所指對象是常量。

(1)頂層const可以表示任意的對象是常量

(2)底層const則與指針和引用等複合類型的基本類型部分有關

 

 

6.修飾函數返回值,防止返回值被改變

  const int fun();

  接收返回值的變量也必須加const

  const int a = fun(); //接收的變量也要是const的,int a = fun()是錯誤的

 

7.修飾類的成員變量

  使用const修飾的變量必須初始化,在類中又不能在定義時初始化,

如;

class

{

private:

  int a = 10;

  const int b = 10;

  static const int c = 10;

//這樣初始化都是錯的,

}

 

初始化const int類型(沒有static),在類的構造函數上初始化

Class Test

{

Public:

  Test():b(23) //構造函數上初始化b的值爲23

   {

}

private:

     const int b ;

}

 

初始化staticconst int這個類型的(帶有static的),在類的外面初始化

class Test

{

private:

  static const int c;

} 

const int Test::c=10; //類的外部初始化c爲10

 

8.const定義的對象變量只能作用於這個程序該C/C++文件,不能被該程序的其他C/C++文件調用,

 如file1.cpp中 const int val;

 在file2.cpp中, extern intval; //錯誤,無法調用,

要想const定義的對象變量能被其他文件調用,定義時必須使用extern修飾爲

extern const int val;

 

非const變量默認爲extern,要是const能被其他文件訪問必須顯示指定爲extern

 

發佈了42 篇原創文章 · 獲贊 7 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章