当前位置: 首页 > news >正文

初始C++(四):内联函数

文章目录

    • 一.内联函数概念
    • 二.内联函数用法
    • 三.内联函数的特性
    • 四.内联函数和宏

一.内联函数概念

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

二.内联函数用法

inline void swap(int& x, int& y)//内联函数
{int tmp = x;x = y;y = tmp;
}int main()
{int x = 10;int y = 20;swap(x, y);cout << x << ' ' << y << endl;return 0;
}

普通函数在调用的时候会开辟函数栈帧,而内联函数是直接替换,在调用内联函数的地方进行展开。

在release模式下可以通过调试->右键代码->反汇编中看到效果,而debug模式下需要手动设置,因为debug模式下,编译器默认不会对代码进行优化,以下给出vs2013的设置方式:
在这里插入图片描述

通过汇编可以发现调用swap不是通过call指令转到swap函数之后在执行,而是直接将swap函数展开:
在这里插入图片描述

三.内联函数的特性

  1. inline是一种以空间换时间的做法,如果编译器将函数当成内联函数处理,在编译阶段,会用函数体替换函数调用,缺陷:可能会使目标文件变大,优势:少了调用开销,提高程序运行效率。(这里的空间是指可执行程序体积会变大)
  2. inline对于编译器而言只是一个建议,不同编译器关于inline实现机制可能不同,一般建议:将函数规模较小(即函数不是很长,具体没有准确的说法,取决于编译器内部实现)、不是递归、且频繁调用的函数采用inline修饰,否则编译器会忽略inline特性
  3. inline不建议声明和定义分离,分离会导致链接错误。因为inline被展开,就没有函数地址了,链接就会找不到。所以这里建议不要去声明了,直接在.h文件或者要用的地方直接定义就行。

四.内联函数和宏

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

宏的缺点:
1.不方便调试
2.变量没有类型安全的检测(只是纯粹的替换)
3.在有些地方用起来繁琐,容易出错
4.导致代码可读性差,可维护性差

因为宏有很多缺点,所以C++建议
1.一般的宏常量用const,enum枚举来替换
2.简单的宏函数用内联函数去替换

http://www.lryc.cn/news/6956.html

相关文章:

  • 九、初识卷积
  • 【Linux】【编译】编译调试过程中如何打印出实际的编译命令
  • linux安装jdk
  • 迅为iTOP-3A5000龙芯开发板安装UOS操作系统
  • Firefox 110, Chrome 110, Chromium 110 官网离线下载 (macOS, Linux, Windows)
  • 如何使用ArcGIS转换坐标
  • 链表基本原理
  • 基于JAVA+SpringBoot+Vue+ElementUI中学化学实验室耗材管理系统
  • 1.输入子系统学习-struct input_dev-2023.02
  • 解决:PDFBox报的java.io.IOException: Missing root object specification in trailer
  • MAC OSX安装Python环境 + Visual Studio Code
  • 音乐 APP 用户争夺战,火山引擎 VeDI 助力用户体验升级!
  • CAP和BASE理论
  • 基于商品理解的成交能力和成交满意度优化在Lazada的实践
  • idea推送镜像到desktop报错:Cannot run program “docker-credential-desktop“ 系统找不到指定的文件。
  • hive开窗函数
  • 安全多方计算系列笔记1——前世今生
  • 16- 梯度提升分类树GBDT (梯度下降优化) (算法)
  • SpringCloud+Nacos+Gateway
  • 高通开发系列 - linux kernel内核升级msm-3.18升至msm-4.9(2)
  • Spring依赖注入与反转控制到底是个啥?
  • Linux Shell脚本讲解
  • Linux:用户空间非法指针coredump简析
  • 带你玩转Jetson之Deepstream简明教程(四)DeepstreamApp如何使用以及用于工程验证。
  • 快速搭建个人在线书库,随时随地畅享阅读!
  • 电子纸墨水屏的现实应用场景
  • 常量const、引用、指针的大杂烩
  • 宝塔搭建实战php开源likeadmin通用管理移动端uniapp源码(四)
  • Hive的分区表与分桶表内部表外部表
  • 和数集团打造《神念无界:源起山海》,诠释链游领域创新与责任