#内联函数#

目录

1.宏引入

2.内联函数

3.内联函数的特性

4.内联函数的声明和定义不能分离


1.宏引入

宏定义函数

宏的本质是一种替换,在预编译过程阶段,使用了宏定义函数的地方就会被替换成宏定义,所以这样的函数是不能进行调试的。也是不会建立函数栈帧的。

宏的优缺点

 优点: 1.增强代码的复用性。 2.提高性能。

 缺点: 1.不方便调试宏。(因为预编译阶段进行了替换)

             2.导致代码可读性差,可维护性差,容易误用。

             3.没有类型安全的检查 。

inline函数在release的模式下会在使用了内联函数的地方展开,会用函数体替换函数的调用,这里和宏是类似的,但不是整个函数体一字不差的替换。

默认在debug下面不会展开,就可以调试,所以他既没有建立函数栈帧的开销,同时又可以调试,他既有宏的优点,又完善了宏的缺点。

2.内联函数

inline关键字是用来定义内联函数的。

3.内联函数的特性

1. inline是一种以空间换时间的做法,如果编译器将函数当成内联函数处理,在编译阶段,会 用函数体替换函数调用。

缺陷:代码太多,又被频繁调用,就会造成代码膨胀,程序会变得很大。

优势:少了调用开销,提高程序运 行效率。

2. inline对于编译器而言只是一个建议,不同编译器关于inline实现机制可能不同,一般建 议:将函数规模较小(即函数不是很长,具体没有准确的说法,取决于编译器内部实现)、不 是递归、且频繁调用的函数采用inline修饰,否则编译器会忽略inline特性 ,即直接当成普通函数调用

当内联函数是递归函数,或者函数内容太多,编译器会忽略内联特性。一般是10行代码以下。

4.内联函数的声明和定义不能分离

内联函数不能声明和定义分离在两个文件中,会报错。出现链接错误,建议直接放在.h文件里面。

因为inline被展开,就没有函数地址 了,链接就会找不到。

// 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;
}

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值