当前位置: 首页 > 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.简单的宏函数用内联函数去替换

相关文章:

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

文章目录一.内联函数概念二.内联函数用法三.内联函数的特性四.内联函数和宏一.内联函数概念 以inline修饰的函数叫做内联函数&#xff0c;编译时C编译器会在调用内联函数的地方展开&#xff0c;没有函数调用建立栈帧的开销&#xff0c;内联函数提升程序运行的效率。 二.内联函…...

九、初识卷积

文章目录1、通过边缘检测认识卷积2、Padding3、Strid Convelution4、RGB图像的卷积THE END1、通过边缘检测认识卷积 \qquad在使用神经网络进行图像识别时&#xff0c;神经网络的前几层需要完成对图像的边缘检测任务&#xff0c;所谓的边缘检测就是让计算机识别出一张图片的垂直…...

【Linux】【编译】编译调试过程中如何打印出实际的编译命令

&#x1f41a;作者简介&#xff1a;花神庙码农&#xff08;专注于Linux、WLAN、TCP/IP、Python等技术方向&#xff09;&#x1f433;博客主页&#xff1a;花神庙码农 &#xff0c;地址&#xff1a;https://blog.csdn.net/qxhgd&#x1f310;系列专栏&#xff1a;Linux技术&…...

linux安装jdk

step1 下载jdk 到下面的网站下载需要的jdk安装包版本。 Java Downloads | Oracle step2 复制到opt目录 其中user_name对应自己的home目录的用户文件夹 sudo cp /home/user_name//home/czh/Downloads/jdk-17_linux-x64_bin.tar.gz /opt/ step3 到opt目录解压安装包&#xf…...

迅为iTOP-3A5000龙芯开发板安装UOS操作系统

3A5000板卡采用全国产龙芯3A5000处理器&#xff0c;基于龙芯自主指令系统&#xff08;LoongArch&#xff09;&#xff0c;市面上龙芯3A5000主板价格都在上万元&#xff0c;可以说是非常贵了&#xff0c; 迅为全新推出了款千元内的iTOP-3A5000开发板,这款板卡各方面的配置也是第…...

Firefox 110, Chrome 110, Chromium 110 官网离线下载 (macOS, Linux, Windows)

Mozilla Firefox, Google Chrome, Chromium, Apple Safari 请访问原文链接&#xff1a;https://sysin.org/blog/chrome-firefox-download/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;www.sysin.org 天下只剩三种&#xff08;主流&am…...

如何使用ArcGIS转换坐标

1.概述大家都知道ArcGIS提供了坐标转换功能&#xff0c;在我们手里的数据坐标系千差万别&#xff0c;经常会遇到转换坐标的时候&#xff0c;那么是否可以用ArcGIS进行转换&#xff1f;答案是肯定的&#xff0c;但是转换的过程比较复杂&#xff0c;这里为大家介绍一下转换的方法…...

链表基本原理

链表基本原理1.链表1.1 基本原理1.2 链表大O记法表示2. 链表操作2.1 读取2.2 查找2.3 插入2.4 删除3.链表代码实现1.链表 1.1 基本原理 节点 组成链表的数据格子不是连续的。可以分布在内存的各个位置。这种不相邻的格子就叫结点。每个结点保存数据还保存着链表里的下一结点的…...

基于JAVA+SpringBoot+Vue+ElementUI中学化学实验室耗材管理系统

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 当前&#xff0c;中学…...

1.输入子系统学习-struct input_dev-2023.02

内核版本&#xff1a;4.4.194 平台相关&#xff1a;rk3399 目前主要是看的触摸屏的代码 目录 一、include/linux/input.h&#xff08;struct_input_dev&#xff09; 二、结构体的注释部分&#xff08;百度翻译&#xff09; 三、Documentation/input/event-codes.txt&…...

解决:PDFBox报的java.io.IOException: Missing root object specification in trailer

文章目录问题描述原因分析解决方案问题描述 使用pdfbox类库操作pdf文件时&#xff0c;遇到下面的报错信息&#xff1a; java.io.IOException: Missing root object specification in trailer PDFBox参考&#xff1a; https://pdfbox.apache.org/ Apache PDFBox 库是一个开源的…...

MAC OSX安装Python环境 + Visual Studio Code

MAC上开发python怎么能少得了python3环境呢&#xff0c;而安装python3环境的方式也有多种&#xff0c;这里仅选用并记录本人认为比较方便的方式 安装Homebrew Homebrew是macOS 缺失的软件包管理器&#xff0c; 使用它可以在MAC上安装很多没有预装的东西&#xff0c;详细说明可…...

音乐 APP 用户争夺战,火山引擎 VeDI 助力用户体验升级!

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;并进入官方交流群 国内数字音乐市场正在保持稳定增长。 根据华经产业研究院数据报告显示&#xff0c;2020 年数字音乐市场规模为 357.3 亿元&#xff0c;到 2022 年市场规模已增长至 482.7 …...

CAP和BASE理论

CAP理论CAP是 Consistency、Availability、Partition tolerance 三个词语的缩写&#xff0c;分别表示一致性、可用性、分区容忍性。它指出一个分布式计算系统不可能同时满足以下三点&#xff1a;• 一致性&#xff08;Consistency&#xff09; &#xff1a;等同于所有节点访问同…...

基于商品理解的成交能力和成交满意度优化在Lazada的实践

作者&#xff1a;马蕊 Lazada推荐算法团队 在Lazada各域推荐场景中&#xff0c;既有优质商品优质卖家不断涌现带来的机会&#xff0c;也有商品质量参差带来的问题。如何才能为用户提供更好的体验&#xff0c;对卖家变化行为进行正向激励呢&#xff1f;下面本文将为大家分享我们…...

idea推送镜像到desktop报错:Cannot run program “docker-credential-desktop“ 系统找不到指定的文件。

windows Docker 搭建仓库 打开docker desktop 。 打开windows cmd窗口或powershell窗口。 输入"docker run -d -p 5000:5000 --name test registry:2 "运行一个名字叫test的registry容器。 idea配置springboot项目的docker插件 在pom.xml中的plugins中加入下面代码…...

hive开窗函数

hive开窗函数 窗口函数 数据准备 1 jx 20 2 zx 24 3 yx 18 4 wz 10 5 yy 34 6 wy 25create table t (> id int,> name string,> age int> )> row format delimited fields terminated by ; load data inpath /data/data.txt into table t;ROW_NUMBER ROW_N…...

安全多方计算系列笔记1——前世今生

这一系列笔记参考了绿盟科技研究通讯的安全多方计算文章&#xff0c;及其他。 首先看定义&#xff1a;在不泄露参与方原始输入数据的前提下&#xff0c;允许分布式参与方合作计算任意函数&#xff0c;输出准确的计算结果。 起源 安全多方计算问题及解首先由姚期智&#xff08…...

16- 梯度提升分类树GBDT (梯度下降优化) (算法)

梯度提升算法 from sklearn.ensemble import GradientBoostingClassifier clf GradientBoostingClassifier(subsample0.8,learning_rate 0.005) clf.fit(X_train,y_train) 1、交叉熵 1.1、信息熵 构建好一颗树&#xff0c;数据变的有顺序了&#xff08;构建前&#xff0c…...

SpringCloud+Nacos+Gateway

SpringCloudNacosGatewaySpringBoot整合GatewayNacos一. 环境准备1. 版本环境2. 服务环境二. 实战1.创建用户服务2.创建订单服务3.创建网关服务4.测试三. 避坑指南问题1--503问题问题2--网关服务启动报错SpringBoot整合GatewayNacos 本篇文章只演示通过gateway网关服务访问其他…...

Mcrouter监控与调试:使用丰富统计和调试命令的终极指南

Mcrouter监控与调试&#xff1a;使用丰富统计和调试命令的终极指南 【免费下载链接】mcrouter Mcrouter is a memcached protocol router for scaling memcached deployments. 项目地址: https://gitcode.com/gh_mirrors/mc/mcrouter Mcrouter作为memcached协议路由器&a…...

如何快速上手DRG存档编辑器:深岩银河玩家的终极修改指南

如何快速上手DRG存档编辑器&#xff1a;深岩银河玩家的终极修改指南 【免费下载链接】DRG-Save-Editor Rock and stone! 项目地址: https://gitcode.com/gh_mirrors/dr/DRG-Save-Editor 还在为《深岩银河》中漫长的资源收集而烦恼&#xff1f;想要快速解锁所有职业的高级…...

云容笔谈·东方红颜影像生成系统与STM32的奇妙联动:在嵌入式设备上展示AI艺术

云容笔谈东方红颜影像生成系统与STM32的奇妙联动&#xff1a;在嵌入式设备上展示AI艺术 你有没有想过&#xff0c;把AI生成的那些精美绝伦的东方美人图&#xff0c;从云端“请”下来&#xff0c;放进一个可以摆在桌面的小相框里&#xff0c;让它成为一件会“呼吸”、能“换装”…...

艾尔登法环性能优化指南:使用Elden Ring FPS Unlock And More解锁帧率、调整视野与宽屏支持

艾尔登法环性能优化指南&#xff1a;使用Elden Ring FPS Unlock And More解锁帧率、调整视野与宽屏支持 【免费下载链接】EldenRingFpsUnlockAndMore A small utility to remove frame rate limit, change FOV, add widescreen support and more for Elden Ring 项目地址: ht…...

agent-rules:AI编程助手的规则引擎与发展蓝图

agent-rules&#xff1a;AI编程助手的规则引擎与发展蓝图 【免费下载链接】agent-rules Rules and Knowledge to work better with agents such as Claude Code or Cursor 项目地址: https://gitcode.com/gh_mirrors/ag/agent-rules 项目定位与核心架构 agent-rules作为…...

内容解锁革新:突破付费壁垒的5种高效资源获取方案

内容解锁革新&#xff1a;突破付费壁垒的5种高效资源获取方案 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 在信息爆炸的数字时代&#xff0c;优质内容的获取常常受到付费墙的限制。…...

为什么MySQL执行完Delete操作之后,空间没有释放?从原理到解决方案全解析

前言 在使用MySQL的过程中&#xff0c;很多开发者都遇到过这个困惑&#xff1a;我明明执行了DELETE删除了大量数据&#xff0c;为什么用df -h看磁盘空间&#xff0c;或者用SHOW TABLE STATUS看表的数据大小&#xff0c;一点都没变小&#xff1f;难道MySQL的DELETE是“假删除”…...

在工厂老板看来,真正有价值的合作,不是多了一个供应商,而是多了一个能够帮助他降低成本、提高效率的伙伴。

一、为什么优化建议更能够打动人心?样品&#xff1a;展示的是你自身的能力&#xff1b;建议&#xff1a;解决的是客户的痛点。车间主任每天都在为换模慢、产品良率低、返工多而头疼&#xff1b;老板则在为人工成本上涨、订单交付紧张、利润空间变薄而焦虑。如果你能够带着一份…...

3步掌握Elden Ring FPS Unlock And More高效进阶技巧:让开放世界探索体验提升300%

3步掌握Elden Ring FPS Unlock And More高效进阶技巧&#xff1a;让开放世界探索体验提升300% 【免费下载链接】EldenRingFpsUnlockAndMore A small utility to remove frame rate limit, change FOV, add widescreen support and more for Elden Ring 项目地址: https://git…...

CosyVoice Docker镜像包:从构建到生产环境部署的完整指南

最近在搞语音处理服务的容器化部署&#xff0c;发现这里面门道还挺多的。特别是像 CosyVoice 这种集成了复杂模型和依赖的服务&#xff0c;直接扔到服务器上跑&#xff0c;很容易遇到各种“玄学”问题。今天就来分享一下我折腾 CosyVoice Docker 镜像包的全过程&#xff0c;从踩…...