const作用:
const在c中的作用和cpp中的略有不同。
在c中经过const修饰的变量并不是绝对的常量,例如
C
const int a = 0; //定义了一个c语言中的常量
int *pa = &a; //定义了一个普通指针指向常量a,这中间经过了强制类型转换
*pa = 2; //a的值可以通过pa指针修改
printf("%d %d\n", a, *pa);
输出: 2 2
上面是在c中写下的代码,程序正常运行并且修改了a的值。同样的代码经过cpp编译会产生不同的结果:
Cpp
const int a = 0; //cpp 常量
//int *pa = &a; //这样不能通过编译
int *pa = (int *)&a; //这样可以通过编译
*pa = 2;
printf("%d %d\n", a, *pa);
输出:0 2
const修饰变量的几种情况:
const int a = 0; //a 是常量,c和cpp中效果不同
const int *pa = &a; //const修饰*pa,*pa不可改变,也就是pa指向的内存空间的内容不能改变
int const *pa = &a; //等价上一个
int * const pa = &a; //const 修饰pa,pa不可改变,但*pa可以改变
cpp中的const:
cpp中利用const可以定义常对象和常方法:
const和#define比较: