首页 > 代码库 > c++的const

c++的const

在c++里比在c中功能更强!

#define定义常量,只是简单的文本替换,不做类型检测,容易出错。

const int a = 10;

1 //定义const常量默认是int类型,const定义的符号常量有自己的数据类型2 //编译更加严格检测类型错误!比#define安全。符号常量有地址,可以指针指向,只是不能通过指针修改。3 //const定义最后有分号,作为语句来处理。而#define不写分号4 //可以在函数外部,在函数内部也可。只不过作用域不一样。5 //c++也支持#define定义符号常量,建议使用更安全的const方式6     int x = 5;7     #define T1 x + x8     #define T2 T1 - T19     cout << "T1 = " << T1 << " T2 = " << T2 << endl;

解释:#define只是简单的文本复制!T1=X+X=10  T2=x+x – x+x=x+x=10

改为const定义符号常量:则结果为10和0

const和指针结合

指向常量的指针(注意理解指向常量的含义)

1     int x = 5;2     const int *p;//指针p本身是变量,*p(指向的内容)也不一定就必须指向的是常量!3     //注意这里!只不过是不能修改*p,即不能通过指针p修改p指向的内容。4     p = &x;//p本身的值可以修改5     p = NULL;6 7     //*p = 10;// error C3892: “p”: 不能给常量赋值8     x = 10;//指针p指向的内容,不是常量,可以修改。只是不能通过指针p去修改而已。

常量指针

 1     int x = 5; 2     //指针p指向的内容是变量 3     int * const p = &x;//指针p本身是常量,不能被修改,必须在定义的时候初始化! 4     *p = 10;//ok 5     //p = NULL;// error C3892: “p”: 不能给常量赋值

指向常量的常指针

1     int x =5;2     //指针p本身是常量,p指向的内容也是常量3     const int * const p = &x;//必须第一次定义就马上初始化4     //p = NULL;//error C3892: “p”: 不能给常量赋值5     //*p = 10;//error C3892: “p”: 不能给常量赋值

注意:在函数指针参量里使用const保护,防止修改实参,增强了安全性,增强了可读性。

当然还有常引用的使用。

 

c++的const