const和宏定义区别
const定义的是变量,修饰过后,该变量的值就不予许再进行修改,成为一个常变量。该常量有数据类型,在进行编译运行的时候能够进行类型检查。
#define定义后,只是将定义的常量字符进行简单的字符替换,字符替换在预编译的过程中进行,但是宏定义没有数据类型,所以不存在类型检查
以下,同样是定义一个常量a,可以进行两者的对比
#define a 100
const int a = 100;
1.处理方式不同
宏定义是在预处理阶段展开
const是在编译运行过程中进行的
2.类型检查
宏定义不带有数据类型,所以没有类型检查
const常量带有数据数据类型,能够进行类型检查
3.内存分配
宏定义是在预处理阶段替换所有的字符,所以并不会对定义的常量进行内存分配
const常量会在内存中进行分配
宏定义和内联函数
内联函数和普通函数相比可以加快程序的运行的速度,内联函数不需要中断调用,在编译的时候直接镶嵌到目标代码中,而宏只是进行简单的替换,并且宏不能进行类型检查,而内联函数可以,这就提高了程序的安全性。
对于内联函数和宏定义来说,都是牺牲空间消耗来提高代码运行的效率,但是内联函数相对于宏定义更加地安全。
举个例子:
#include<iostream>
using namespace std;
//比较两个数的大小
#define Max(a,b) (a>b)?a:b
inline int MAX(int a, int b)
{
if (a > b) return a;
else return b;
}
int main()
{
int a = 5;
int b = 10;
int m = Max(a, ++b);
cout << "宏定义:"<<m<< endl;
cout << "内联函数:"<<MAX(a, ++b) << endl;
return 0;
}
可以花点时间看看上面两个分部输出多少
3
2
1
以下是输出结果
不知道你算对了没有,这是因为宏定义是进行简单的字符替换,将Max(a,++b) 替换成(a>++b)?a:++b,因此实际上是加了两次,而内敛函数明显只加了一次。