c++基础语法之内联函数

news2024/9/24 19:20:26

引言:

在C++编程中,性能优化是一个永恒的话题。内联函数(Inline Functions)作为提高程序执行效率的一种重要手段,在编译器优化过程中扮演着关键角色。

一、内联函数的基本概念

定义:内联函数是C++中一种特殊的函数,它建议编译器在调用该函数时,将函数体直接插入到每个调用点,而非按照通常的函数调用机制进行(即不生成函数调用的机器代码,不保留栈帧等)。
关键字:在C++中,通常使用inline关键字来声明一个函数为内联函数。但请注意,inline仅是对编译器的建议,编译器有权忽略这个建议。

它和我们函数的写法其实是一样的,只是多了一个关键字inline。比如下面这个内联函数。(实现的是加法)。

二、内联函数的优势

减少函数调用的开销:对于小型、频繁调用的函数,内联可以减少因函数调用而产生的栈帧创建、参数传递、返回等开销,从而提高程序执行效率。
优化编译器优化:编译器在将内联函数体插入到调用点的过程中,可以进一步优化代码,如消除冗余代码、优化寄存器分配等。

三、内联函数的局限性

代码膨胀:如果内联函数体过大或被频繁内联,会导致最终生成的代码体积显著增加,可能会增加缓存未命中的几率,反而降低程序性能。

但是我们的编译器他是一个很聪明的存在,就是当我们自己定义的内联函数的代码很长的时候,他就不会是一个内联函数了,编译器会将它当成普通的函数。
编译时间增加:编译器需要分析每个内联函数的调用点,以确定是否进行内联,这可能会增加编译时间。

inline不建议声明和定义分离,分离会导致链接错误。因为inline被展开,就没有函数地址 了,链接就会找不到
调试困难:由于内联函数体被插入到调用点,调试时可能难以追踪到具体的函数调用栈,增加了调试难度。

四、内联函数的使用技巧

适用于小型函数:只有小型、简单且频繁调用的函数才适合声明为内联函数。
避免递归和复杂控制流:内联函数应避免包含递归调用和复杂的控制流,因为这些情况可能使编译器难以或不愿进行内联。
考虑编译器优化:现代编译器非常智能,能够自动进行许多优化,包括函数内联。因此,在手动声明内联函数之前,应先评估编译器的优化效果。

五、结论

内联函数是C++中一种强大的性能优化工具,但也需要谨慎使用。正确理解和应用内联函数,可以帮助我们编写出更高效、更可维护的代码。然而,我们也应意识到,内联函数并非万能的,它有其自身的局限性和适用场景。因此,在实际编程中,我们应结合具体情况,灵活运用内联函数,以达到最佳的性能优化效果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1924348.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C#可空类型与数组

文章目录 可空类型NULL合并运算符(??)数组数组声明数组初始化数组赋值数组访问多维数组交错数组数组类数组类的常用属性数组类的常用方法 可空类型 C#提供了一种特殊的数据类型,nullable类型(可空类型),可…

k8s字段选择器

文章目录 一、概述二、基本语法三、支持的字段1、错误示例2、支持的字段列表 四、支持的操作符1、示例 五、跨多种资源类型使用字段选择器 一、概述 在Kubernetes中,字段选择器(Field Selectors)和标签选择器(Label Selectors&am…

MySQL更新和删除(DML)

DML-修改数据 UPDATE 表名 SET 字段1 值1,字段2值2,....[WHERE 条件] 例如 1.这个就是把employee表中的这个name字段里面并且id字段为1的名字改为itheima update employee set nameitheima where id 1; 2.这个就是把employee这个表中的name字段和…

string 的完整介绍

1.string类 还记得我们数据结构学的串吗,现在在c中,我们有了c提供的标准库,它是一个写好的类,非常方便使用 1. string是表示字符串的字符串类 2. 该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作stri…

被边缘化后:飞猪“摆烂”,庄卓然求变?

文:互联网江湖 作者:刘致呈 走向独立的飞猪,在最近两年是越来越放飞自我了。 从“酱香大床房”的硬蹭热度,到“攻城价”被京都威斯汀酒店声明“打假”; 从年初的大数据杀熟争议,到最近被12036退票点名&a…

VLM技术介绍

1、背景 视觉语言模型(Visual Language Models)是可以同时从图像和文本中学习以处理许多任务的模型,从视觉问答到图像字幕。 视觉识别(如图像分类、物体保护和语义分割)是计算机视觉研究中一个长期存在的难题&#xff…

据传 OpenAI秘密研发“Strawberry”项目

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

ollama + lobechat 搭建自己的多模型助手

背景 人工智能已经推出了快2年了,各种模型和插件,有渐渐变成熟的趋势,打造一个类似 hao123网站的人工智能模型入口,也变得有需求了。用户会去比较多个ai给出的答案,作为程序员想拥有一台自己的GPU服务器来为自己服务。…

GuLi商城-商品服务-API-品牌管理-统一异常处理

每个方法都加这段校验太麻烦了 准备做一个统一异常处理@ControllerAdvice 后台代码: package com.nanjing.gulimall.product.exception;import com.nanjing.common.exception.BizCodeEnum; import com.nanjing.common.utils.R; import lombok.extern.slf4j.Slf4j; import org…

【UE5.1】Chaos物理系统基础——06 子弹破坏石块

前言 在前面我们已经完成了场系统的制作(【UE5.1】Chaos物理系统基础——02 场系统的应用_ue5)以及子弹的制作(【UE5.1 角色练习】16-枪械射击——瞄准),现在我们准备实现的效果是,角色发射子弹来破坏石柱。…

【算法】单调队列

一、什么是单调队列 单调队列是一种数据结构,其特点是队列中的元素始终保持单调递增或递减,主要用于维护队列中的最小值或最大值。 不同于普通队列只能从队头出队、队尾入队,单调队列为了维护其特征,还允许从队尾出队 不管怎么…

【学习笔记】4、组合逻辑电路(上)

数字电路的分类:组合逻辑电路,时序逻辑电路。本章学习组合逻辑电路。 4.1 组合逻辑电路的分析 给定的逻辑电路,确定其逻辑表达式,列出真值表,得到简化后的逻辑表达式,分析得到其功能。 3位奇校验电路 &…

OSPF.综合实验

1、首先将各个网段基于172.16.0.0 16 进行划分 1.1、划分为4个大区域 172.16.0.0 18 172.16.64.0 18 172.16.128.0 18 172.16.192.0 18 四个网段 划分R4 划分area2 划分area3 划分area1 2、进行IP配置 如图使用配置指令进行配置 ip address x.x.x.x /x 并且将缺省路由…

MQTT——Mosquitto使用(Linux订阅者+Win发布者)

前提:WSL(Ubuntu22)作为订阅者,本机Win10作为发布者。 1、Linux安装Mosquitto 命令行安装。 sudo apt-get install mosquitto 以上默认只安装了mosquitto的服务,不带测试客户端工具mosquitto_sub和mosquitto_pub。如…

持续学习中避免灾难性遗忘的Elastic Weight Consolidation Loss数学原理及代码实现

训练人工神经网络最重要的挑战之一是灾难性遗忘。神经网络的灾难性遗忘(catastrophic forgetting)是指在神经网络学习新任务时,可能会忘记之前学习的任务。这种现象特别常见于传统的反向传播算法和深度学习模型中。主要原因是网络在学习新数据…

全网最详细单细胞保姆级分析教程(二) --- 多样本整合

上一节我们研究了如何对单样本进行分析,这节我们就着重来研究一下如何对多样本整合进行研究分析! 1. 导入相关包 library(Seurat) library(tidyverse) library(patchwork)2. 数据准备 # 导入单样本文件 dir c(~/Desktop/diversity intergration/scRNA_26-0_filtered_featur…

基于TCP的在线词典系统(分阶段实现)(阻塞io和多路io复用(select)实现)

1.功能说明 一共四个功能: 注册 登录 查询单词 查询历史记录 单词和解释保存在文件中,单词和解释只占一行, 一行最多300个字节,单词和解释之间至少有一个空格。 2.功能演示 3、分阶段完成各个功能 3.1 完成服务器和客户端的连接 servic…

WAF基础介绍

WAF 一、WAF是什么?WAF能够做什么 二 waf的部署三、WAF的工作原理 一、WAF是什么? WAF的全称是(Web Application Firewall)即Web应用防火墙,简称WAF。 国际上公认的一种说法是:Web应用防火墙是通过执行一…

电表及销售统计Python应用及win程序2

接着上一篇给代码添加了表格功能,方便更好的处理数据。 import json import os from datetime import datetime from tkinter import * from tkinter import messagebox from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg from matplotlib.figure …

JAVA设计模式>>结构型>>适配器模式

本文介绍23种设计模式中结构型模式的适配器模式 目录 1. 适配器模式 1.1 基本介绍 1.2 工作原理 1.3 适配器模式的注意事项和细节 1.4 类适配器模式 1.4.1 类适配器模式介绍 1.4.2 应用实例 1.4.3 注意事项和细节 1.5 对象适配器模式 1.5.1 基本介绍 1.5.2 …