const用法的总结

一.const类型的变量在声明的时候一定要进行初始化,否则会报错。

二.在全局作用域中定义非const对象,它在整个程序中都可以访问
例如:
//file1.cc
int counter;
//file2.cc
extern int counter;
++counter;

在全局作用域中定义const变量意味着这个变量是该文件的局部变量,需要通过制定变量类型为extern,才可以在整个程序中使用该变量。
例如:
//file1.cc
extern const int counter=0;
//file2.cc
extern const int counter;
++counter;

三.const应用和非const引用
非const引用只能绑定到与该引用类型一致的变量上,并且不可以初始化为右值。
例如:
double a=1.22;
int &b=a;  //错误
double &c=a; //正确
int r=10;
int &d=r+55; //错误 
因为编译器会把代码进行转化:
int temp=a;
int &b=temp;
也就是说b绑定的不是a,而是temp,这样尝试通过b来改变a是不可能成功的,所以这样是不合法的。

const引用则可以绑定到不同的类型上或者绑定右值。
例如:
double a=1.22;
const int &b=a;  //正确
const double &c=a; //正确
int r=10;
const int &d=r+55; //正确

四.指向const的指针
例如:
double a=1.01;
const double * b=&a;
*b=2.1; //这显然是错误的
a=2.1; //这是正确的,a和*b的值都会变成2.01,有些人将之称为自以为指向const的指针

五.const指针
例如:
int a=10;
int * const b=&a; //这意味着b只能指向a
a=20;
*b=30; //上面两句均可以改变变量的值。

另外和第四条有关系,并且比较有意思的是:
typedef int * pint;
int value=10;
const pint a=&value;
pint const b=&value;
int * const c=&value; //3句话的效果是一致的

posted on 2011-08-15 19:41  karying  阅读(197)  评论(0编辑  收藏  举报

导航