内联函数(超详细版)

article/2025/9/18 8:50:39

1.内联函数的由来

当我们调用函数的时候,实际会有额外的开销,为了避免或减少这些额外的开销,c++中引入内联函数(inline functions)。

2.内联函数的原理

1)当我们调用内联函数时,不会像调用普通函数那样额外开销,而是把内联函数的代码直接嵌入到调用它的地方去,但仍然保持其独立性。

2)如果一个函数为内联函数,它就不会出现在最终的可执行代码里,只是会存在于编译器中,在编译器需要的地方插入。

3.内联函数的写法

在一般函数前面加上inline的关键字,在头文件里定义而非声明

4.内联函数的优点

1)以牺牲代码的空间换时间,提高了效率。

2)与c语言的宏的思想类似,但要优于宏,因为宏不能做类型检查,而内联函数作为一个函数可以进行类型检查。

5.被自动默认的内联函数

1)在class声明中定义了成员函数,这些函数都是内联的。

2)如果我们为了使类看起来直观,在class中声明了成员函数,也可在class下方定义,将成员函数变为内联函数:

class a
{
private:int i;
public:a();void f1();
};inline a::a() 
{
...
}
inline void a::f1()
{
...
}

6.使用内联函数与否的情况

建议使用的情况:

1)函数代码本身较短,系统可能默认处理其为内联函数

2)频繁被调用的,处于循环中的函数

不能使用的情况:

1)过于巨大的函数,编译器可能拒绝该函数作为内联函数来插入

2)递归函数


扩展与提升:

为什么要在我们创建的头文件中对内联函数进行定义”而非声明”

程序编译时会生成中间代码文件,即.obj文件(也叫目标文件),而内联函数的原型可能不会出现该文件中,另外编译器每次只针对一个编译单元,即一个.cpp文件。

如果我们在.h文件中只是声明了inline函数,其原型很可能不会出现最终的.obj文件中,在主函数中调用的函数被编译时可能被认为是普通函数,在最终的.obj文件中相应部分会被按照普通函数处理,即需要调用相应函数。所以连接器(ld)工作时就会出现问题,主函数中调用的函数无法在其他文件中找到。因此我们应该在头文件中对内联函数进行定义。


http://chatgpt.dhexx.cn/article/59ROVYPo.shtml

相关文章

如何证明一个问题是NP-Hard或NP-Complete?

文章目录 NP-hard vs NP-CompleteReduction SAT ProblemReducing SAT to Shortest Clique ProblemReducing SAT to Shortest Tour Problem A List of NP-CompleteSet Vertex Cover Problem & Independent SetK-coloring and CliquePackingLongest Common Subsequence 参考资…

【机器学习】P问题、NP问题、NP-hard、NP-C问题解析与举例理解

目录 1 基本概念1.1 多项式和时间复杂度1.2 P和NP1.3 NP-hard和NP-C1.4 总结 2 举例理解NP问题3 其他NP问题 1 基本概念 1.1 多项式和时间复杂度 (1)多项式 a x n b x n − 1 c ax^nbx^{n-1}c axnbxn−1c,形如这种形式的就被称为x的最高…

P问题、NP问题、NPC问题、NP-hard问题详解

要理解P问题、NP问题、NPC问题、NP-hard问题,需要先弄懂几个概念: 什么是多项式时间?什么是确定性算法?什么是非确定性算法?什么是规约/约化? 文章目录 多项式时间(Polynomial time&#xff09…

什么是P=NP问题?

来自:后端技术指南针 1 前言 今天和大家一起了解个高能知识点:PNP问题。 看到这里我们可能是一头雾水,不由得发问: P问题是什么?NP问题又是什么?PNP又是什么意思?研究并解决PNP问题的意义是什么…

NP问题总结(概念+例子+证明)

目录 基本概念 证明思路 常见例子 21个常见NPC问题 原理论证 基本概念 P类问题:(polynominal) 存在多项式时间算法的问题,即在多项式时间内可解的问题; 例如:冒泡排序、快速排序等问题; NP类问题:(Nondeterministic pol…

[知识归纳]关于NP问题的概念与解释 | NP-complete NP-hard

NP问题 P问题是一类可以通过确定性图灵机在多项式时间(Polynomial time)内解决的问题集合。NP问题是一类可以通过非确定性图灵机( Non-deterministic Turing Machine)在多项式时间(Polynomial time)内解决的决策问题集合。 多项式时间(Polynomial time&#xff09…

P问题、NP问题、NP完全问题和NP-hard问题

在讲P类问题之前先介绍两个个概念:多项式,时间复杂度。(知道这两概念的可以自动跳过这部分) 1、多项式: 恩....就是长这个样子的,叫x最高次为n的多项式.... 2、时间复杂度 在计算机算法求解问题当中,经常用时间复…

P问题、NP问题、NPC问题、NPH问题详解

P: Polynomial,是指能在多项式时间内解决的问题;(如果一个问题可以找到一个能在多项式的时间里解决它的算法,那么这个问题就属于P问题。P是英文单词多项式的第一个字母。)NP:Non-deterministic …

判断凸多边形(向量叉积运用)

469. 凸多边形 - 力扣(LeetCode) 给定 X-Y 平面上的一组点 points ,其中 points[i] [xi, yi] 。这些点按顺序连成一个多边形。 如果该多边形为 凸 多边形(凸多边形的定义)则返回 true ,否则返回 false 。…

【编程题】判断一个多边形是否为凸多边形

题目: 顺序输入点的坐标,判断按这些点顺序连接起来的多边形是否为凸多边形还是凹多边形 输入描述: 输入包括两行; 第一行是一个整数n,n>3,作为提示输入的顶点数量 第二行为2*n个整数,为各点…

10343 划分凸多边形(优先做)

题目描述 10343 划分凸多边形(优先做) 时间限制:800MS 代码长度限制:10KB 提交次数:0 通过次数:0 题型: 编程题 语言: G;GCC;VC;JAVA Description 问题描述:一个正凸N边形,可以用N-3条互不相交的对角线将正N边形分成N-2个三角形…

N顶点凸多边形中对角线交点的个数

题目描述 对于一个N个定点的凸多边形,他的任何三条对角线都不会交于一点。请求楚图形中对角线交点的个数。 例如,6边形: 我们可以发现,两条不平行对角线才会有一个交点,同时,两条对角线又确定了一个四边形…

凸多边形的划分

题目: 给定一个具有 NN 个顶点的凸多边形,将顶点从 11 至 NN 标号,每个顶点的权值都是一个正整数。 将这个凸多边形划分成 N−2N−2 个互不相交的三角形,对于每个三角形,其三个顶点的权值相乘都可得到一个权值乘积&a…

`算法知识` 多边形, 凸多边形, 外接矩形

catalog 图片引用图二 多边形分类周长多边形的外接矩形 凸多边形去除若干点, 仍为凸多边形 ID_COUNT: 3 图片引用 图二 多边形 以下讨论, 均在(笛卡尔坐标系)中, 即两点间的距离为 (欧几里得距离) 由N条边和N个点组成, N > 3, 面积一定> 0 每条边, 都是(线段) 线段: 必…

判断多边形的凹凸性和计算多边形面积:利用向量叉乘

根据百度百科的讲解: 凸多边形 现在重点讲解顶点凹凸性法(最常用也是较为简单的方法):计算总结在最后。 利用向量叉乘的相关知识进行计算:假设当前连续的三个顶点分别是P1,P2,P3。计算向量P1P3…

判断点在凸多边形內

判断点在凸多边形內 判断点在凸多边形内的算法有很多,可以参考链接3,个人尝试使用了同侧法,此处也只解析这个方法 算法原理: 同侧法是判断点在向量哪一侧的一个方法,这个算法的概念是来自于参考文献一,参…

—【动态规划】凸多边形最优三角剖分

0014算法笔记——【动态规划】凸多边形最优三角剖分 分类: 算法 2013-03-05 20:10 612人阅读 评论(0) 收藏 举报 三角剖分 凸多边形最优解 动态规划 算法笔记 1、问题相关定义: (1)凸多边形的三角剖分:将凸多边形分割成互不相交的三角形的…

0014算法笔记——【动态规划】凸多边形最优三角剖分

1、问题相关定义: (1)凸多边形的三角剖分:将凸多边形分割成互不相交的三角形的弦的集合T。 (2)最优剖分:给定凸多边形P,以及定义在由多边形的边和弦组成的三角形上的权函数w。要求确定该凸多边形的三角剖分,使得该三角…

判断平面多边形的凹凸性

对于平面多边形的三角化处理也是计算机图形学里面的一个领域,最近由于项目的需要,需要对平面多边形进行剖分,特此对其作了些研究。 在对平面多边形进行处理的时候,很多时候需要知道多边形的凹凸性,本文介绍两种方法来…

最小凸多边形(凸包)

描述 给出平面上n个点的坐标&#xff0c;计算最远两点间的距离&#xff0c;以及包含所有点的最小凸多边形&#xff08;凸包&#xff09; 输入 第一行一个整数n&#xff0c;接下来是n行的实数对&#xff0c;表示n个点坐标。2<n<10000 n x1 y1 x2 y2 … xn yn 输出 输出…