学习笔记 | C++内联函数 inline函数和宏定义的区别

1. 内联函数

在这里插入图片描述

  • 编译器将使用相应的函数代码替换函数调用。
  • 内联函数的运行速度比常规函数稍快,但代价是需要占用更多内存。

2. 内联函数的使用

  • 在函数声明和定义须前加上关键字inline;
#include<iostream>
inline double square(double x){return x*x;}
int main()
{
    using namespace std;
    double a,b;
    double c = 13.0;
    a = square(5.0);
    b = square(4.5+7.5);
    cout<<"a="<<a<<",b="<<b<<endl;
    cout<<"c="<<c<<endl;
    cout<<"c squared="<<square(c++)<<endl;
    cout<<"now c="<<c<<endl;
    return 0;
}

输出:

a=25,b=144
c=13
c square=169
now c=14

3. 内联函数和宏定义的区别

C语言使用预处理器语句#define来提供宏。

#define SQUARE(X) X*X

宏定义时通过文本替换来实现的,X是参数的符号标记。

a = square(5.0);->a=5.0*5.0;
b = square(4.5+7.5);->b=4.5+7.5*4.5+7.5
d = square(c++);->d=c++*c++

可以看出,对于b,需要使用括号才能正常运算。

#define SQUARE(X) ((X)*(X))

⚠️ 对于c,却仍递增了两次。

两者区别如下:
  • 宏定义和内联函数存在本质的区别,转换的时候应考虑是否转换后功能是否正常。
  • 内联函数在编译器时展开,宏在预编译时展开。
  • 在编译的时候内联函数可以直接被嵌入到目标代码中,而宏只是一个简单的文本替换。
  • 内联函数可以完成诸如类型检查、语句是否正确等编译功能,宏就不具有这样的功能。
  • 宏不是函数,inline函数是函数。
  • 宏在定义时要小心宏参数(一般情况是把参数用括号括起来),否则容易出现二义性。而内联函数定义时不会出现二义性。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值