一.C/C++中的const
C中的const是"一個不能被改變的普通變量",在C中,它總是佔內存的,而且它的名字是全局符,默認是外部連接.C編譯器不能把const看成一個編譯期的常量.在C中:
const bufsize =100;
char buf[bufsize];
是錯誤的.
C++中的const默認是內部連接,也就是說,const僅在const被定義過的文件裏纔是可見的,而在連接時不能被其他編譯單元看到.當定義一個const時,必須賦一個初值給它,除非用extern作了清楚的說明:
extern const bufsize;
C++編譯器通常不會爲const分配存儲空間,它把這個定義保存在符號表裏。
二 const指針
當使用帶有指針的const時,有兩種選擇:或者const修飾指針正指向的對象,或者const修飾存儲在指針本身的地址裏.
(1)指向const的指針
const int * x;
" x是一個指針,它指向一個const int",這裏不需要初始化,因爲說x可以指向任何東西,但是它所指的東西是不可以改變的.
(2)const指針
int d=1;
int * const x=&d;
"x是一個指針,這個指針是指向int 的const指針".因爲現在指針本身是const指針,編譯器要求給它一個初始化值,這個值在指針壽命期間不變.然而要改變它所指向的值是可以的,可以寫 *x=2;
三 const指針賦值
int d =1;
const int e=2;
int *u=&d; // ok--- d not const
int *v= &e; //illegal ---- e const
int *w =(int*)&e; //legal but bad practice
四 類中的const
類中的const必須在構造函數的初始化列表裏面初始化或者將其設置爲static
class A{
A() { const int size=3;}
};
或者:
class A {
static const int size=3;
};