内联函数与宏替换

        内联函数,又叫内嵌函数,是一种在函数调用处内嵌一个函数体的函数,类似于C语言中的宏函数,但是又有所不同。关键词是inline

        对于宏函数,是一种编译器在预处理阶段通过直接替换代码的方式,是一种简单的文本替换,省去了入栈出栈的开销。当然宏函数的缺点也很明显:具有边界效应、无法调试、无法访问类的私有成员。

        而说到内联函数的特点,就需要先了解什么叫函数调用。

        函数调用,有时间上和空间上的开销,程序在执行一个函数之前需要做一些工作,实参,局部变量,返回值等若干寄存器入栈,然后才能执行函数体,当执行完毕后,还要回收空间(出栈)等。

        所以为了解决这个问题,我们可以使用内联函数。

        内联函数是c++编译器直接将函数体插入在函数调用的地方,相对于普通函数来说,没有普通函数调用时的额外开销(压栈、跳转、返回)。而编译器不一定会准许函数的内联请求,对函数进行inline声明只是程序员对其的一个建议,非强制性的。

        内联函数也具有以下限制条件:

        不存在循环语句;

        不存在过多的判断语句;

        函数体不能太过庞大;

        不能对函数进行取址操作;

        内联声明必须在调用语句之前;        

  用法实例:

#include <iostream> 
using namespace std; 
#define MAX(A,B) A > B ? A :B 

inline int find_max(int a,int b) //内联函数
{ 
    return a > b ? a : b; 
}

int main(int argc, const char *argv[]) 
{
    int a = 2,b = 2; 
    cout<<find_max(++a,b)<<endl; 
    cout<<a<<" "<<b<<endl; 
    cout<<"***********************"<<endl; 
    int c = 2,d =2; 
    int ret = MAX(++c,d); //operator<<(cout,A > B ? A :B) //宏替换
    cout<<"ret = "<<ret<<endl; 
    return 0; 
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值