一.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;
};