1、define与const之间的区别
#define Pi 3.14159;
const double Pi=3.14159;
对于上面两种在使用时方法很类似但是其本质有着很大的不同:define只是简单的文本替换,即在所有出现Pi的地方就用3.14159替换,不为其分配内存空间;而对于const来说是一个常量,系统会为其分配对应的内存空间
2、内联函数的实现方式及原理
内联函数的用法很简单 ,在函数调用之前声明并直接对函数进行定义,注意内联函数不需要声明!
什么样的函数适合做内联函数:一般较为简单且经常用的函数比较适合做内联函数,如果把复杂函数做成内联函数,开销会变大。
内联函数的实现原理,和define类似,简单的文本替换
案例如下:
inline void printA()
{
int a=5;
cout<<a;
}
void main()
{
printA();
//等价下面这种情况
/*{
int a=5;
cout<<a;
}*/
}
内联限制:不能存在任何形式的循环语句、不能存在过多的条件判断句、函数体不能过于庞大、不能对函数进行取址操作
结论;内联函数在编译时直接将函数体插入函数调用的地方;inline只是一中请求,编译器不一定允许;内联函数省去了普遍函数调用时压栈,跳转和返回的开销。
3、宏替换与展开
案例:
#define MYFUNC(a,b) ((a)<(b)?(a):(b))
int myfunc(int a,int b)
{
return ((a)<(b)?(a):(b));
}
void main()
{
int a=1;
int b=3
int c=MYFUNC(++a,b);
//宏替换并展开:((++a)<(b)?(++a):(b))
//返回c等于3(c被加了两次)a=3,b=3;
int c=myfunc(a,b);
//a=1,b=3,c=1;
}