在C语言和C++中,我们都会用到const,并且对于static有不同的用法和作用。下来我将就C语言和C++两个不同的编译环境分别对const的用法和作用进行讲述。
1、在C语言中const的使用
(1)const修饰的变量称为常变量。此时它不能作为左值。
(2)不能定义数组大小。
(3)其他性质和普通变量一样。
eg:
const int a = 10;
int *p = (int *)&a;
*p = 20;
printf("%d\n",a);//此时a的值被修改为20;
2、在C++中const的使用
(1)把加了const的变量称为常量
(2)C++中const的处理机制:在编译阶段把所有用到const常量的地方全部替换成常量的初始化值。
(3)必须初始化。如果不初始化无法进行替换
(4)能定义数组大小。
(5)杜绝间接访问来修改常量内存的风险。也就是说不能有被修改的风险,如果有编译不通过。
注意:const int *p 和int * const p是有很大区别的。
const int *p中const修饰的是*p;
int * const p中const修饰的是p;
(6)const可以修饰成员方法,成为常成员方法。在常成员方法中只能访问其他成员,不能修改其他成员;普通对象和常对象都可以调用常方法,但是常对象只能调用常方法。
(7)const可以修饰成员变量,成为常成员变量,因此他们的初始化必须写在构造函数的初始化列表当中,否者编译会报错。
注意:C++中const修饰的变量也可以是常变量(和C语言中一样)。代码如下:
int b = 10;
const int a = b;
int *p = (int *)&a;
*p = 20;
std::cout<<a<<std::endl;//此时a被修改为20。