C++中内联函数的使用

*为什么要使用内联函数
对于一个普通函数的调用,参数传递和变量进出栈是要一定开销的(尤其是非常平凡地调用某个函数),在C++中,有两种方法可以避免函数调用时的这种开销——宏定义(#define)和内联函数(inline),关于宏定义的方法我已经在另一篇文章(C++中的预处理命令)中有过讨论,这里不再介绍,鉴于使用宏定义时会出现下面三个问题(1)出现重复计算(2)不进行参数类型的检查和转换(3)不利用一些工具对程序的处理(如调试).所以内联函数(inline)是更好的选择。内联函数的本质是“函数体代码被插入到该函数的被调用处”,乍一看是与#define差不多的,其实有很大的区别——#define是在预处理阶段完成的,也就是说是由预处理器来完成的;而内联函数是在编译时刻完成的,也就是说是由编译器完成的。所以,内联函数通过避免被调用的开销来提高执行效率,尤其是它能够通过调用(“过程化集成”)被编译器优化。

*如何使用内联函数
//inlinedemo.h
#ifndef INLINEDEMO_H
#define INLINEDEMO_H
class InlineDemo
{
private:
 int a;
 int b;
public:
 int getA(){return a;}//存取类的私有成员函数做为内联函数使用最为广泛
 int getB(){return b;}//同上
 int sub(){return a-b;}
 int add();
}
#endif

//inlinedemo.cpp
#include"inlinedemo.h"
inline InlineDemo::add()
{
 return a+b;
}

inline Multiply(int lhs,int rhs)
{
 return lsh*rhs;
}

从上面的代码可以看出,将函数定义为内联函数有两种方法:对与全局函数,只要在该函数声明或定义时在前面加上关键词inline就可以了;对于类的成员函数,当函数的实现在类体内部时,该函数就被默认为inline函数,当函数的实现在类体外部时,只需像全局函数一样加上关键词inline就可以了。所以上面代码中出现的所有函数都是内联函数。
最后一点要注意的是,即使你把一个函数声明或定义成了inline函数,也不能保证该函数一定能被编译器当作内联函数来处理,只能说是建议当作内联函数来处理,例如当你的函数体很大,编译器就基本不会把它当作内联函数来处理,这会因为频繁调用该函数而导致程序代码体积的极速膨胀,在内存较小的机器中,会影响指令高速缓冲装置的击中率。
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值