【C++入门】什么是内联函数?

目录

一、概念

为什么要有内联函数?

内联函数设计的初衷是为了替代部分 #define 宏定义

 二、特性

1.空间换时间

2.编译器做主

 3.声明定义放一起

总结


一、概念

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

        如果在上述函数前增加inline关键字将其改成内敛杉树,在编译期间编译器会用函数体替代函数函数的调用。

        查看方式:在release模式下,查看编译器生成的汇编代码中是否存在call Add

为什么要有内联函数?

内联函数设计的初衷是为了替代部分 #define 宏定义

宏的优缺点?

优点:

1.增强代码的复用性。

2.提高性能。

缺点:

1.不方便调试宏。(因为预编译阶段进行了替换)

2.导致代码可读性差,可维护性差,容易误用。

3.没有类型安全的检查。

内联函数替代宏之后:

1.方便调试。

2.可读性好,可维护性好。

3.有类型安全的检查

        可以看出,内联函数在保留宏的优点的同时,完美解决了宏的缺点,当然内联函数和宏一样,只适用于短小函数,复杂的长函数不适合采用内联函数的方式。

 二、特性

1.空间换时间

        inline是一种以空间换时间的做法,如果编译器将函数当成内联函数处理,在编译阶段,会用函数体替换函数调用,缺陷:可能会使目标文件变大,优势:少了调用开销,提高程序运行效率

2.编译器做主

        inline对于编译器而言只是一个建议,不同编译器关于inline实现机制可能不同,一般建议:将函数规模较小(即函数不是很长,具体没有准确的说法,取决于编译器内部实现)、不是递归、频繁调用的函数采用inline修饰,否则编译器会忽略inline特性。下图为《C++prime》第五版关于inline的建议:

 3.声明定义放一起

        inline不建议声明和定义分离,分离会导致链接错误。因为inline被展开,就没有函数地址了,链接就会找不到。

// F.h
#include <iostream>
using namespace std;
inline void f(int i);
// F.cpp
#include "F.h"
void f(int i)
{cout << i << endl;
}
// main.cpp
#include "F.h"
int main()
{f(10);return 0;
}
// 链接错误:main.obj : error LNK2019: 无法解析的外部符号 "void __cdecl f(int)" (?f@@YAXH@Z),该符号在函数 _main 中被引用

总结

        内联函数是一种空间换时间的做法,当对程序执行效率有要求时,可以考虑使用。

        内联函数优化了宏定义,当想使用宏时,用内联函数。

        内联函数规模较小,非递归,被频繁调用。

这里再提一点:在类内定义的函数都自动称为内联函数。

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

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

相关文章

CAD圆弧

import dxfgrabberinputFilePathe:/test3-11/Drawing2.dxf #输入文件的路径dxf dxfgrabber.readfile(inputFilePath)#按图层访问 # for layer in dxf.layers: # #print(layer.name,layer.color,layer.linetype) # print("图层名&#xff1a;",layer.name)l…

CAD电气制图中怎么用圆弧连接导线?

在CAD电气制图过程中经常会需要连接两条导线&#xff0c;那么你知道CAD软件中怎么用圆弧连接两条导线呢&#xff1f;浩辰CAD电气软件中提供了便捷的圆弧连接功能&#xff0c;接下来的CAD电气制图教程就和小编一起来看看浩辰CAD电气软件中圆弧连接功能的相关使用技巧吧&#xff…

php中划弧线,cad画弧形的快捷键是什么?如何画弧形?

cad画弧形的快捷键是A&#xff0c;画弧形的方法&#xff1a;首先确定圆心&#xff0c;并点击圆弧命令&#xff1b;接着继续输入C进行圆心的确定&#xff0c;并调整半径和位置&#xff1b;最后点击选择两个端点后exc退出即可完成。 cad画弧形的快捷键是A&#xff0c;画弧形的方法…

你知道CAD软件将圆弧与直线转换成多段线的方法吗?

CAD制图时想要对直线与圆弧构成的整体对象进行多段线编辑&#xff0c;首先需要将这个对象转换成多段线。本文将介绍CAD如何将直线与圆弧连接成多段线。 1.使用CAD软件打开需要进行操作的图纸文件&#xff0c;用夹点拾取一下&#xff0c;从右边的特性栏可以看到这个图形是由4条…

圆弧的绘制

圆弧的分类 圆心/起/终点画圆弧 其操作方法类似于圆命令&#xff0c;第一次单击鼠标左键&#xff0c;确定圆心&#xff0c;移动鼠标&#xff0c;再次单击鼠标左键确定半径&#xff0c;最后通过移动鼠标来确定圆弧长度&#xff08;若不移动就单击鼠标左键&#xff0c;则取消该次…

AUTOCAD——圆弧命令

创建圆弧。 执行方式 命令行&#xff1a;AEC 菜单栏&#xff1a;绘图→圆弧 工具栏&#xff1a;圆弧命令图标 “圆弧命令操作命令位置”界面 执行以上命令后&#xff0c;命令行会显示以下信息&#xff1a; 选项说明 &#xff08;1&#xff09;起点&#xff1a;指定第一个点…

chatgpt赋能python:Python中字符串的转换方法

Python中字符串的转换方法 作为一门非常强大的编程语言&#xff0c;Python在字符串的处理上也有着非常丰富的功能。在Python中&#xff0c;字符串是非常重要的数据类型之一&#xff0c;也是最常用的数据类型之一。字符串在Python中有着很多的用途&#xff0c;比如表示文本数据…

学习cad画圆弧

今天我们就来学习画圆弧。首先我们来看看下面的图形就很容发现a、b两条线都是圆弧。 1 这里我们就来学习如何画a、b圆弧。 先按照图上标识的尺寸画好两个圆。 2 执行画圆弧命令。c-空格键-t-空格键执行命令。此时鼠标手型变成一个小圆圈&#xff0c;找到需要画圆弧连接的地方点…

HTML如何画一段弧,css3如何画圆弧

css3如何画圆弧.circle1 { width: 100px; height: 200px; border: 1px solid black; border-radius: 100% 0 0 100%/50%; border-right: none; } .circle2 { width: 200px; height: 100px; border: 1px solid black; border-radius: 50% 50% 0 0/100% 100% 0 0; border-bottom:…

matlab画指定角度圆弧,CAD中如何根据指定的角度画圆弧

在用CAD绘图的过程中&#xff0c;我们有时候需要根据一个指定的角度画出相应的圆弧&#xff0c;那么怎么操作呢&#xff1f; 下面跟着小编一起来学习吧 方法一&#xff1a; 1、首先&#xff0c;大家打开中望CAD软件 2、利用软件绘图功能的画“圆”功能画出一个半径为R的圆&…

CAD梦想画图中的“绘图工具——圆弧”

CAD在线绘图绘制圆弧&#xff0c;可以指定圆心、端点、起点、半径、角度、弦长和方向值的各种组合形式。绘CAD制圆弧的方法是&#xff0c;选取起点、第二点和端点。 执行方式 &#xff08;1&#xff09;单击菜单栏“绘图→圆弧”。如图&#xff1a; &#xff08;2&#xff09…

画圆弧方法

已知圆心坐标P,圆上一个点坐标A,A-P直线以圆心旋转角度x后,求新的A点坐标P新.x (A.x - P.x) cos((x/180)*PI) P.xP新.y (A.x - P.x) sin((x/180)*PI) P.y <Path x:Name"test" Stroke"AliceBlue" StrokeThickness"4" Width"100"…

CAD绘圆弧命令

1.单击菜单栏&#xff0c;“绘图->圆弧。 2.单击绘图工具栏绘”圆弧命令”按钮。 3.在命令行中输入Arc&#xff0c;按回车键。 执行命令后&#xff0c;命令行将显示如下信息&#xff1a; 命令: Mx_Arc 指定圆弧的起点或 [圆心(C)]: 指定圆弧的第二个点或 [圆心(C)]: 指定…

CAD制图教程:CAD软件中怎么画圆弧梯段?

在使用国产CAD软件绘制建筑CAD图纸的过程中&#xff0c;有些时候会需要画圆弧梯段。但是有些小伙伴刚开始进行CAD制图初学入门学习不知道在浩辰CAD建筑软件中该如何绘制直线梯段&#xff1f;下面就让小编来给大家介绍一下国产CAD制图软件——浩辰CAD建筑软件中绘制圆弧梯段的相…

chatgpt赋能python:Python中未被定义的SEO

Python中未被定义的SEO 介绍 Python是一种广泛使用的高级编程语言。它被广泛应用于Web开发、游戏开发、数据科学、机器学习等领域。虽然Python已经成为许多企业的首选语言之一&#xff0c;但是有一些Python特有的SEO问题仍然没有被完全解决。Python中未被定义的SEO问题会导致…

chatgpt赋能python:Python中画笔颜色的函数介绍

Python中画笔颜色的函数介绍 在Python中&#xff0c;我们可以使用turtle模块来绘制图形&#xff0c;其中画笔颜色是非常重要的一部分。画笔颜色可以决定图形的风格和色调&#xff0c;是图形表现的关键因素之一。Python中提供了几种方法来设置画笔颜色。 1. 设置画笔颜色的函数…

基于深度学习的高精度野生动物检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度野生动物检测&#xff08;水牛、犀牛、斑马和大象&#xff09;识别系统可用于日常生活中或野外来检测与定位野生动物目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的野生动物目标检测识别&#xff0c;另外支持结果可视…

神舟战神t8和z8区别 神舟战神t8和z8哪个好

战神 T8-DA5NP&#xff1a;i5-12500H、RTX 3060、16G512GB SSD 售价 7199 元&#xff0c;显存为 6GB&#xff0c;功耗最高可达 140W&#xff0c;支持独显直连&#xff0c;这点十分加分。比不少友商不支持独显直连的笔记本要好&#xff0c;它们在混合显卡工作模式时帧率比独显直…