1.用于定義常量變量:
const int Val = 10;Val = 20; //錯誤,不可被修改2.const作為形式參數:
void fun1(const int &val){ val = 10; //出錯}void main(){ int a = 2; fun1(a); //因為出錯,這個函數結束時a的值還是2}有人會問為什么不按值傳遞,按值傳遞還需要把這個值復制一遍,而引用不需要,使用引用是為了提高效率
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.修飾指針:
const int *A; 或 int const *A; //const修飾指向的對象,A可變,A指向的對象不可變*A=10; //會報錯int *const A; //const修飾指針A,A不可變,A指向的對象可變A=&a; //會報錯const int *const A; //指針A和A指向的對象都不可變const int a=10;int *A=&a; //會報錯6.修飾函數返回值,防止返回值被改變:
const int fun(); //接收返回值的變量也必須加constconst int a = fun(); //接收的變量也要是const的,int a = fun()是錯誤的7.修飾類的成員變量:
使用const修飾的變量必須初始化,在類中又不能在定義時初始化,如:
class{ private: //這樣初始化都是錯的: const int b = 10; static const int c = 10;};初始化const int類型(沒有static),在類的構造函數上初始化:
Class Test{ public: Test():b(23){ } //構造函數上初始化b的值為23 private: const int b;};初始化static const int這個類型的(帶有static的),在類的外面初始化:
class Test{ private: static const int c;}; const int Test::c=10; //類的外部初始化c為108.const定義的對象變量只能作用于這個程序該C/C++文件,不能被該程序的其他C/C++文件調用
如file1.cpp中,const int val;在file2.cpp中,extern intval; //錯誤,無法調用要想const定義的對象變量能被其他文件調用,定義時必須使用extern修飾為extern const int val;非const變量默認為extern,要是const能被其他文件訪問必須顯示指定為extern9.const修飾引用變量:
int b=10;const int &a=b;a=11; //會報錯b=11; //不會報錯新聞熱點
疑難解答