第3课.进化后的const

1.c语言中

const修饰的变量是只读的,本质上还是变量
const修饰的局部变量在栈上分配空间(因为在栈上分配空间,所以我们可以通过改变这个空间的值。间接去改变这个变量。)
const修饰的全局变量在只读存储区分配变量(这个区不能改)
const在编译期有用,在运行期无用(const修饰的变量只在编译期有只读属性,过了编译期的运行期就无效了)
const修饰的变量不是真的变量,它只是告诉编译器该变量不能出现在赋值号的左边。

思考:c语言中怎么定义真正的常量?
           只有enum(注:define不能,它是宏定义不是常量定义,下面会讲到)

eg:const变量被修改

2.c++中

const的声明是在符号表中放入常量,编译过程中发现使用该常量是则直接以符号表中的值替换,编译过程中若发现以下情况则给对应的常量分配存储空间。(这里分配空间只是为了更好的兼容c语言,实际上并没有什么用)
a.对const常量使用了extern
b.对const常量使用了&
:c++编译器虽然可能为const常量分配空间,但不会使用其存储空间的值。

3.c++中const常量与宏定义的区别

const常量是由编译器处理,编译器对const常量进行类型检查和作用域检查
宏定义有预处理处理,单纯的文本替换
:const定义的变量不能使用在数组,case之类的地方(因为const不是常量)

posted @ 2019-10-28 14:39  人民广场的二道贩子  阅读(134)  评论(0编辑  收藏  举报