1.在C语言中:
const int a=10; 此时a不可作为左值 但是int*p=&a;是正确的,在C语言中const修饰的称为常变量
2.在C++中
上述int*p=&a;表达式即为错误的,因为在C++中const修饰的称为常量,常量的值不允许改变
在C++中编译期间会将使用该常量值的地方替换成了常量的值,会使普通指针不可指向
3.int arr[]中括号中的数,即数组长度在C语言中const int a=10; int arr[a];是错误的因为编译器就需要确定数组长度,而编译器无法去地址中取值。但是相反的在C++中就可以。
4.C++中常量一定要初始化
5.const修饰的全局变量是一个local的符号,而链接时只关心local的符号
无法解析的外部符号有两种情况:①不存在②存在但是无法使用(local符号) 通过extern解决
6.C++中常量是否退化成常量?如下
①int c=20; const int d=c;//此处退化为常变量
②有 void fun(const int a)在main中调用fun(10)也会退化为常变量
这种是因为编译器也无法确定,都会导致const修饰的退化成为常变量
7.const 修饰的是距离它最近的完整类型,修饰的内容是属于const所修饰的类型的内容
8.注意:不能泄露常量的地址给非常量的指针