C++ 内联函数

内联函数(inline)

 

宏函数的缺陷

  1. 宏定义和宏函数在预处理阶段中,只是做单纯地替换,不进行其他操作,不会出现在编译过程,有时候不严谨地定义会导致意想不到的错误。
  2. 无作用域
  3. 无数据类型
.h
#define mYAdd( x, y ) x + y
.cpp
qDebug()<<"mYAdd(10,20)*3:"<<mYAdd(10,20)*3;

.h
#define mYAdd( x, y ) ( x + y )
.cpp
qDebug()<<"mYAdd(10,20)*3:"<<mYAdd(10,20)*3;

从上述操作可以看出,宏函数和宏定义只是在预处理阶段将相关的代码替换了而已,会出现很对问题,所以

宏定义尽量使用const关键字,宏函数则使用内联函数

内联函数的引出

内联函数相较于普通函数来说,不会有入栈和出栈的操作,调用时更有效率。

(但是编译器是否采纳操作人员的意见,将操作员所声明的函数变成内联函数对待,有相关几条注意事项)

定义形式(在函数声明前加上inline关键字):

inline void fucntion(.....) {..}

.h
inline int add(int a,int b)
{
    return a+b;
}
.cpp
 qDebug()<<"inline-add效果:"<<add(10,20);//正常调用即可

内联函数的定义放置于.h文件中 

类内部的内联函数

任何在类内部定义的函数,符合条件,均可自动变成内联函数

内联函数和编译器

C++对内联函数有一定的限制,以下情况编译器可能考虑不会将函数进行内联编译。

  1. 不能存在任何形式的循环语句
  2. 不能存在过多的条件判断语句
  3. 函数体不能过于庞大
  4. 不能对函数进行取址操作

内联函数仅仅是操作人员给编译器的一个建议,编译器不一定会接受这种建议,如果你没有将函数声明为内联函数,那么编译器也可能将此函数做内联编译。一个好的编译器将会内联小的,简单的函数。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值