const 和 #define 的对比 第一,const与#define的相同点 C++中的const常量类似于宏定义 const int c = 5 ≈ #define c 5 const是用来替换#define的一个手段。 这两个程序运行结果都是一样的,都是定义一个常量a,注意#define最后是没有分号的。下面这两个程序也说明了这一点: 第二,const与#define的不同点 看程序: 现在a是一个宏定义,我们知道宏定义,凡是变量a所在的地方预处理编译器都进行替换,也就是将a替换为10。因此在函数fun1中定义的a在函数fun2中是可以使用的,也就是说宏定义是没有作用域检查的。运行可以通过。 那么如果想将a的作用域限制在函数fun1中,可以使用“卸载宏”或者称作“取消宏” #undef 来达到目的。 #undef a —— 此处往下取消a的宏定义; #undef —— 此处往下取消所有宏定义。 在看看const作用域检查,我们在fun1中定义变量b,其作用域就局限在fun1函数中了,在fun2函数中是不可用的,可以取消 //printf("b=%d\n",b); 的注释,发现编译时错误的! 结论: C++中的const常量与宏定义不同 const常量是由编译器处理的,提供类型检查和作用域检查; 宏定义由预处理器处理,单纯的文本替换。 【C++】笔记系列均为原创,转载请注明转自微号:Lightspeed-Tech 或 AutoCode 更多精彩资料,请关注!
|