宏定义和内联

宏定义和内联

宏函数:

#define OUTPUTINT(x)  cout << “INT:” << x << endl; 

宏函数不是函数,只是看起来像函数,使用起来还是在预处理阶段进行代码替换,宏函数省去了函数调用的过程,节省了函数调用的开销。

但是,宏函数在替换过程中会因为运算符优先级产生与预期不一致的结果,于是c++提出了内联函数的概念。

内联函数原理:

在c++中,通过inline关键字将函数定义为内联函数。在编译阶段,编译器在发现inline关键字时会将函数体保存在函数名所在的符号表内,在程序调用内联函数的地方,编译器直接在符号表内获取函数名和函数体,并用内联函数的函数体替换掉函数调用,从而节省了函数调用的开销。

内联函数的定义:

1.在函数定义时使用inline关键字,声明时不能出现inline关键字,使用者不需要知晓函数是否为内联

2.在函数声明的同时给出函数定义,编译器会自动将函数识别为内联函数。将函数定义暴漏给使用者,不推荐此种用法。

内联函数和宏定义的区别:

相同点:二者都可以节省函数调用过程中产生的时间和空间的开销,提高程序执行的效率,目的相同。

本质:宏定义是字符串替换,而内联函数是个函数,具有函数基本性质,因此内联函数可以像普通函数一样调试,而宏定义不可以。

展开阶段:宏定义在预处理阶段展开,内联函数在编译阶段展开,很多编译阶段的工作对内联函数有效,比如类型安全检查和自动类型转换。

内联函数作为类的成员函数时,可以访问类的所有成员,this指针也会被隐式的正确使用,宏定义无法实现。

注意点:

定义内联函数时,需要注意函数体的体积。如果函数体庞大,代码展开后会造成程序代码体积极度增长,出现代码膨胀。当然现在的编译器优化后,会自动判断用户定义的内联函数是否适合,如果不适合,是不会进行代码展开的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值