#define宏常量和const常量的区别

2017-11-14  本文已影响58人  霜之幽语

C++ 语言可以用const来定义常量,也可以用#define来定义常量。但是前者比后者有更多的优点:

2.实现机制

宏是预处理命令,即在预编译阶段进行字节替换。const常量是变量,在执行时const定义的只读变量在程序运行过程中只有一份拷贝(因为它是全局的只读变量,存放在静态存储区的只读数据区。根据C/C++语法,当你声明该量为常量,即告诉程序和编译器,你不希望此量被修改。 程序的实现,为了保护常量,特将常量都放在受保护的静态存储区内。凡是试图修改这个区域内的值,都将被视为非法,并报错。 这不能理解为凡是字符串都是放在静态存储区域的。这个跟数据类型没有关系,而是这个量是变量还是常量的问题。例如,一个字符串变量就是可以被修改的。 这种静态存储区域的保护机制是由编译器实现的,而非存储该值的内存的电器属性。换言之,实质上内存永远都可以被用户随意修改,只是编译器给用户的代码注入了一些自己的保护代码,通过软件手段将这段内存软保护起来。这种保护在汇编级别可以轻松突破,其保护也就无效了。

3.用法区别
#define宏定义和const常变量区别:

#define N 2+3;   //我们预想的N值是5,我们这样使用N
int a = N/2;   //我们预想的a的值是2

可实际上a的值是3。原因在于在预处理阶段,编译器将a = N/2处理成了a = 2+3/2;这就是宏定义的字符串替换的“边缘效应”因此要如下定义:#define N (2+3)const定义的表达式则没有上述问题。const定义的常量叫做常变量原因有二:

上一篇 下一篇

猜你喜欢

热点阅读