内联函数的概念原理,限制及其使用

当一个多次引用一个相同函数时,会多次进出函数(编译器找到正确的函数地址把参数传入,返回值传出到正确的地址),当函数体很简单时,可能进出函数的开销比函数体本身的开销还要大。

这时可以用宏或者内联函数来解决:

宏默认没有类型检查,且会出现一些错误,主要体现在:

define# GETMAX(a, b) (a > b ? a : b)

int getmax(int a, int b) {
    return a > b ? a : b;
}

int main(){
    int n = 10;
    int n2 = getmax(n++, 2);//n2 = 10
    n = 10;
    int n1 = GETMAX(n++, 2);//此时,n1是11(n++在宏中n++ > 2 ? n++ : 2中已经加了1)
    cout << n1 << endl;
}

而内联函数可以在编译的时候像宏一样把这个函数二进制的机器码放到引用函数的位置来,效果很像宏,但内联函数可以对函数体内变量类型进行检查。

内联函数的限制以及使用:

1.内联函数是对编译器的建议(当函数体比较大,编译器就不会采取这个建议)

2.debug版本没有inline,为了方便调试

3.内联函数由于经常使用通常放在头文件中使用

4.如果在头文件中放入函数,有多个源文件引用此头文件,则编译不通过,这是因为多次引用头文件的时候多次定义了此函数,此时需要在此函数前加关键字inline变为内联函数,编译器就知道这不是普通的函数调用,而是内敛函数,就不会发生函数的调用,就不会多次定义该函数

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值