【C++】内联函数与宏 inline & define

内联函数与宏(inline & define)

使用inline修饰函数的声明或者实现,可以使其变成内联函数

写在声明或实现都可以,建议声明和实现都增加inline修饰。

内联函数声明必须在调用语句之前。

  • 作用?

    编译器会将函数调用直接展开为函数体代码
    在这里插入图片描述
    原本main函数中只有一行代码,但函数体中有三行代码,在编译时就会将一行代码自动展开成三行代码。

    • 有啥意义呢?

      在调用函数时,会开辟栈空间,函数结束后会回收栈空间。

      连续调用函数就会连续开辟回收栈空间。

      ——>> 内存开销较大

      如果使用内联函数,编译器会自动将函数展开成函数体代码,就不存在函数调用和开辟回收栈空间,不会分配和回收内存,执行效率会变高。

      ——>> 减少函数调用的开销

      但相应的会增大代码体积。

  • 使用场景:

    1. 函数体体积不是很大
    2. 频繁调用的函数
  • 注意

    1. 尽量不要内联超过10行代码的函数
    2. 不能存在任何形式的循环语句
    3. 不能存在过多的条件判断语句
    4. 有些函数即使声明为inline,也不一定会被编译器内联,比如递归函数,编译器可能拒绝内联请求
    5. 内联函数声明必须在调用语句之前。

define:

  • 只是简单的字符串替换,没有类型检查
  • 是在编译的预处理阶段起作用
  • 可以防止头文件重复引用
  • 不分配内存,给出的是立即数,有多少次使用就进行多少次替换

内联函数与宏

  • 都可以减少函数调用的开销
  • 对比宏,内联函数多了语法检测和函数特性(传参)
  • 在这里插入图片描述

输出:24而不是22

因为宏是简单的文本替换,替换后

int c = ++a + ++a; 

注意:按运算符优先级来说,++ 在 + 的前面,所以先对 a 做两次 ++ 运算,然后再将 a 值相加。
在这里插入图片描述

  • 在这里插入图片描述
    输出:22
    ++ a = 11 作为参数传入add函数,所以返回就是 11 + 11
  • 表达式
    C++有些表达式是可以被赋值的。
    在这里插入图片描述
    先计算 (a = b) ,将b赋值给 a,返回 a
    然后计算 a = 4, 将 4 赋值给 a,返回 a
    最终 a = 4, b = 2
    在这里插入图片描述
    a = 1, b = 4
    C++中可以,但C中不可以。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值