inline 函数

函数与带参数的宏

        有时程序中有一些包含语句非常少的小操作,如计算两个整数中的较小值。可以将其定义为函数。例如:

int main( int v1,int v2 ) { return ( v1< v2 ? v1: v2 ) ; }

        讲这样的小操作定义为函数的优点是:可读性好、易于修改、重用性好。

但缺点是:调用函数有额外的开销,如果频繁调用,会比直接计算慢很多。


        解决这个问题的一种办法是 是使用带参数的宏 :

#define MIN( v1,v2 )  v1 < v2  ? v1 : v2

  使用宏定义可以避免函数调用的开销,但是宏调用是字符串替换,不会检查参数类型,当表达式作为参数展开式可能会引起计算次序混乱或者多次计算的问题。

次序混乱: MIN( a+b , c )  ==>  a+b < c ? a+b :c

多次计算: MIN( a++ , b )  ==>  a++ < b ? a++ : b


在C++中inline(内联)函数为上述问题提出了一种解决方案:

若一个函数被定义为inline(内联)函数,则在编译时,它将在函数的每一个调用点“内联地”展开,从而消除了函数调用的额外开销,但是调用内inline函数时依然会(按照函数调用的语义)进行函数参数类型检查,因此比宏调用更加安全。


在函数定义或者声明中的返回值类型前 加关键字 "inline",那就将函数指定为内联的。

inline int min( int v1, int v2 )

{

return ( v1 < v2 ? v1 : v2  );

}


在调用inline函数的源文件中必须有inline函数的定义。所以 inline函数的定义一般放在头文件中,在每个调用该inline函数的源文件中包含该头文件就可以了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值