内联函数(超详细版)

1.内联函数的由来

当我们调用函数的时候,实际会有额外的开销,为了避免或减少这些额外的开销,c++中引入内联函数(inline functions)。

2.内联函数的原理

1)当我们调用内联函数时,不会像调用普通函数那样额外开销,而是把内联函数的代码直接嵌入到调用它的地方去,但仍然保持其独立性。

2)如果一个函数为内联函数,它就不会出现在最终的可执行代码里,只是会存在于编译器中,在编译器需要的地方插入。

3.内联函数的写法

在一般函数前面加上inline的关键字,在头文件里定义而非声明

4.内联函数的优点

1)以牺牲代码的空间换时间,提高了效率。

2)与c语言的宏的思想类似,但要优于宏,因为宏不能做类型检查,而内联函数作为一个函数可以进行类型检查。

5.被自动默认的内联函数

1)在class声明中定义了成员函数,这些函数都是内联的。

2)如果我们为了使类看起来直观,在class中声明了成员函数,也可在class下方定义,将成员函数变为内联函数:

class a
{
private:
    int i;
public:
    a();
    void f1();
};

inline a::a() 
{
...
}
inline void a::f1()
{
...
}

6.使用内联函数与否的情况

建议使用的情况:

1)函数代码本身较短,系统可能默认处理其为内联函数

2)频繁被调用的,处于循环中的函数

不能使用的情况:

1)过于巨大的函数,编译器可能拒绝该函数作为内联函数来插入

2)递归函数


扩展与提升:

为什么要在我们创建的头文件中对内联函数进行定义”而非声明”

程序编译时会生成中间代码文件,即.obj文件(也叫目标文件),而内联函数的原型可能不会出现该文件中,另外编译器每次只针对一个编译单元,即一个.cpp文件。

如果我们在.h文件中只是声明了inline函数,其原型很可能不会出现最终的.obj文件中,在主函数中调用的函数被编译时可能被认为是普通函数,在最终的.obj文件中相应部分会被按照普通函数处理,即需要调用相应函数。所以连接器(ld)工作时就会出现问题,主函数中调用的函数无法在其他文件中找到。因此我们应该在头文件中对内联函数进行定义。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值