内联函数

很多时候,我们将一个小的表达式写成一个函数。主要是为了:

1;阅读和理解更加容易

2:如果要做修改,修改函数要比修改每一处表达式容易的多

3:函数可以重用。

  但是调用函数比求解等价表达式要慢得多。在大多数机器上,调用函数都要做很多工作,调用前要先保存寄存器,并在返回时恢复。复试实参,程序还调转到一个新的位置执行。

 则内联函数引入:

   内联函数从源代码层看,有函数的结构,而在编译后,却不具备函数的性质。编译时,类似宏替换,使用函数体替换调用处的函数名。一般在代码中用inline修饰,但是否能形成内联函数,需要看编译器对该函数定义的具体处理。

  一般情况下,内联函数的内容应该是多次执行,并且是小的,只有几行的。

大多数编译器不支持递归函数的内联,编译器在内联点展开该函数的代码,内联函数可能在程序中定义不止一次,只要在某个源文件中只定义一次,而且在所有源文件中定义必须一致,

因此,一般将内联函数放在头文件中,为了达到一致,在头文件中加入和修改内联函数,包含这个头文件的源文件必须重新编译。

 

内联函数的特点:

  主要是避免函数调用的开销。提高计算速度。不需要而外的空间和时间的开销。

 

声明:

inline void a();

内联函数和宏的区别:

 

  内联函数和宏的区别在于,宏是由预处理器对宏进行替代,而内联函数是通过编译器控制来实现的。而且内联函数是真正的函数,只是在需要用到的时候,内联函数像宏一样的展开,所以取消了函数的参数压栈,减少了调用的开销。你可以象调用函数一样来调用内联函数,而不必担心会产生于处理宏的一些问题。

  但是宏也有很多的不尽人意的地方。

  1、.宏不能访问对象的私有成员。

  2、.宏的定义很容易产生二意性。

eg:


Class TableClass{
 Private:
  Int I,j;
 Public:
  Int add() { return I+j;};
  Inline int dec() { return I-j;}
  Int GetNum();
}
inline int tableclass::GetNum(){
return I;
}

 

 上面申明的三个函数都是内联函数。在C++中,在类的内部定义了函数体的函数,被默认为是内联函数。而不管你是否有inline关键字。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值