关于内联函数

前言

本篇博客我们来讲一讲内联函数这个东西,希望你可以从中学到东西,或是启发。

一、宏的一些问题

在c++里我们推荐用const enum去替代宏常量,inline去替代宏函数

为什么这样讲呢?因为宏在程序编译的预处理阶段,宏会直接粗暴地对其定义的代码进行替换它有很多的缺点

1.不能调试(预编译阶段就已经给你替换了)

2.没有类型安全的检查

3.有些场景非常复杂

就这个ADD函数我们都要套了一个括号再套一层,因为我们不套的话,宏就只是简单地替换,一些优先级问题就会暴露出来。

二、内联函数

以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数调
用建立栈帧的开销,所以内联函数提升了程序运行的效率

内联函数就是以空间换时间,如果编译器将函数当成内联函数处理,在编译阶段会用函数体替换函数调用,这样就会导致目标文件变大,好处就是减少了调用开销,是程序的运行效率提高了。

虽然内联挺好用但是内联只是向编译器发送一个请求,编译器可以拒绝,一般是函数规模小(75行都可能不执行),不是递归且频繁调用的函数采用内联。

还有要注意的一个点,就是内联函数不要声明和定义分离,不然会出现找不到链接的问题,因为内联函数是直接就在函数的地方展开的,不会生成跳转指令,所以就没办法找到这个函数的定义了,也就是找不到函数体了,要是实在想分离,你就要把函数定义拷贝到那个声明的源文件里去,当然你也可以把两个源文件一起包着

// F.h

#include <iostream>
using namespace std;
inline void f(int i);

// F.cpp

#include "F.h"
void f(int i)
{
cout << i << endl;
}

// main.cpp

#include "F.h"
int main()
{
f(10);
return 0;
}

总结

以上就是今天的博客要讲的内容,感谢各位的阅读,希望对你有帮助,当然如果你对博主写的内容有不同意见也可以评论,或是私信,我一定虚心接受。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值