为什么a的值已经被改变为100了,但是输出了时候还是10?
在c++中,被const 修饰的变量一般被称为常量,且具有宏替换的作用
- 在
编译阶段
,在所有使用const常量的位置,用常量的值代替该常量(注意:&常量除外)- 代码必须经过预处理,编译,汇编,链接才可以执行,所以在
编译阶段
,编译器就直接将a替换成了10,所以输出a也是10,但是一个代码走完程序后,a被修改成了100在C语言中,const修饰的变量不能称为常量,只能称为不能被修改的变量
宏的替换发生在预处理阶段,不会进行类型检测
const修饰的常量替换发生在编译阶段,const修饰的常量是有类型的,因此会参与类型检测
所以在c++中更推荐用const修饰的常量来取代C语言中的宏,因为const修饰的内容已经是常量了,且会参与类型检测,比宏更安全
1.不会类型检测
2.有一定副作用
3.编写要十分小心,少了一个括号,结果大相径庭
4.不能调试
例如这个例子
#define Max(a, b