问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

什么是内联函数

发布网友 发布时间:2022-04-24 18:25

我来回答

5个回答

热心网友 时间:2023-04-27 21:22

在计算机科学中,内联函数(有时称作在线函数或编译时期展开函数)是一种编程语言结构,用来建议编译器对一些特殊函数进行内联扩展(有时称作在线扩展)。

内联扩展是一种特别的用于消除调用函数时所造成的固有的时间消耗方法。一般用于能够快速执行的函数,因为在这种情况下函数调用的时间消耗显得更为突出。这种方法对于很小的函数也有空间上的益处,并且它也使得一些其他的优化成为可能。

没有了内联函式,程式员难以控制哪些函数内联哪些不内联;由编译器自行决定是否内联。加上这种控制维度准许特定于应用的知识,诸如执行函式的频繁程度,被利用于选择哪些函数要内联。

此外,在一些语言中,内联函数与编译模型联系紧密:如在C++中,有必要在每个使用它的模块中定义一个内联函数;与之相对应的,普通函数必须定义在单个模块中。这使得模块编译独立于其他的模块。 

扩展资料:

在C++中我们通常定义以下函数来求两个整数的最大值:

代码如下:


int max(int a, int b)
{
return a > b ? a : b;
}

为这么一个小的操作定义一个函数的好处有:

① 阅读和理解函数 max 的调用,要比读一条等价的条件表达式并解释它的含义要容易得多

② 如果需要做任何修改,修改函数要比找出并修改每一处等价表达式容易得多

③ 使用函数可以确保统一的行为,每个测试都保证以相同的方式实现

④ 函数可以重用,不必为其他应用程序重写代码

虽然有这么多好处,但是写成函数有一个潜在的缺点:调用函数比求解等价表达式要慢得多。在大多数的机器上,调用函数都要做很多工作:调用前要先保存寄存器,并在返回时恢复,复制实参,程序还必须转向一个新位置执行

C++中支持内联函数,其目的是为了提高函数的执行效率,用关键字 inline 放在函数定义(注意是定义而非声明,下文继续讲到)的前面即可将函数指定为内联函数,内联函数通常就是将它在程序中的每个调用点上“内联地”展开。

内联函数应该在头文件中定义,这一点不同于其他函数。编译器在调用点内联展开函数的代码时,必须能够找到 inline 函数的定义才能将调用函数替换为函数代码,而对于在头文件中仅有函数声明是不够的。

当然内联函数定义也可以放在源文件中,但此时只有定义的那个源文件可以用它,而且必须为每个源文件拷贝一份定义(即每个源文件里的定义必须是完全相同的),当然即使是放在头文件中,也是对每个定义做一份拷贝,只不过是编译器替你完成这种拷贝罢了。

但相比于放在源文件中,放在头文件中既能够确保调用函数是定义是相同的,又能够保证在调用点能够找到函数定义从而完成内联(替换)。

参考资料:百度百科——内联函数

热心网友 时间:2023-04-27 21:22

一、内联函数的意义

内联函数是指用inline关键字修饰的函数。

在类内定义的函数被默认成内联函数。内联函数从源代码层看,有函数的结构,而在编译后,却不具备函数的性质。

内联函数不是在调用时发生控制转移,而是在编译时将函数体嵌入在每一个调用处。编译时,类似宏替换,使用函数体替换调用处的函数名。

一般在代码中用inline修饰,但是能否形成内联函数,需要看编译器对该函数定义的具体处理。

二、内联函数的主要作用

内联函数是一种编译机制,优点从代码上是看不出来的,但是程序的执行效率上有差别,通常,编译器对函数调用的处理是一种类似中断的方式。

即当执行到函数调用语句时,程序把当前所有的状态信息比如CPU所有寄存器(其中一个很重要的就是指令指针寄存器)的值保存起来。

然后放心大胆地转去执行那个函数的代码,执行完后再返回原来的地方,恢复原先保存过的状态信息,于是也就可以接着原来被中断的指令继续往下执行。

扩展资料:

一、函数的意义:

1.函数(function)是一个集合元素到令一个集合元素的对应关系,它起着一种映射和变换的功能。

2.如在数学中,一个集合A, 若对A中的每个元素x,按对应法则f,使B中存在唯一的一个元素A与之对应 , 就称对应法则f是X上的一个函数,记作B=f(x)。广义地说。

3.函数其实是完成某一功能的工具,如在数学中,该功能就是用来实现数*算的,就是数学函数,故一般函数是完成某一工程中基础工具,起着基础功能。

4.故一般函数就是一个功能区能完成基本功能的工具。

二、C/C++之宏、内联函数和普通函数的区别

1.内联函数的执行过程与带参数宏定义很相似,但参数的处理不同。

2.带参数的宏定义并不对参数进行运算,而是直接替换;

3.内联函数首先是函数,这就意味着函数的很多性质都适用于内联函数,即内联函数先把参数表达式进行运算求值,然后把表达式的值传递给形式参数。

4.内联函数与带参数宏定义的另一个区别是,内联函数的参数类型和返回值类型在声明中都有明确的指定;

5.而带参数宏定义的参数没有类型的概念,只有在宏展开以后,才由编译器检查语法,这就存在很多的安全隐患。



热心网友 时间:2023-04-27 21:23

内联函数(有时称作在线函数或编译时期展开函数)是一种编程语言结构,用来建议编译器对一些特殊函数进行内联扩展(有时称作在线扩展)。

也就是说建议编译器将指定的函数体插入并取代每一处调用该函数的地方(上下文),从而节省了每次调用函数带来的额外时间开支。

但在选择使用内联函数时,必须在程序占用空间和程序执行效率之间进行权衡,因为过多的比较复杂的函数进行内联扩展将带来很大的存储资源开支。另外还需要特别注意的是对递归函数的内联扩展可能引起部分编译器的无穷编译。

扩展资料

内联扩展是一种特别的用于消除调用函数时所造成的固有的时间消耗方法。一般用于能够快速执行的函数,因为在这种情况下函数调用的时间消耗显得更为突出。这种方法对于很小的函数也有空间上的益处,并且它也使得一些其他的优化成为可能。

没有了内联函式,程式员难以控制哪些函数内联哪些不内联;由编译器自行决定是否内联。加上这种控制维度准许特定于应用的知识,诸如执行函式的频繁程度,被利用于选择哪些函数要内联。

此外,在一些语言中,内联函数与编译模型联系紧密:如在C++中,有必要在每个使用它的模块中定义一个内联函数;与之相对应的,普通函数必须定义在单个模块中。这使得模块编译独立于其他的模块。

参考资料:百度百科——内联函数

热心网友 时间:2023-04-27 21:23

在计算机科学中,内联函数(有时称作在线函数或编译时期展开函数)是一种编程语言结构,用来建议编译器对一些特殊函数进行内联扩展(有时称作在线扩展);也就是说建议编译器将指定的函数体插入并取代每一处调用该函数的地方(上下文),从而节省了每次调用函数带来的额外时间开支。

但在选择使用内联函数时,必须在程序占用空间和程序执行效率之间进行权衡,因为过多的比较复杂的函数进行内联扩展将带来很大的存储资源开支。另外还需要特别注意的是对递归函数的内联扩展可能引起部分编译器的无穷编译。

扩展资料:

内联扩展是一种特别的用于消除调用函数时所造成的固有的时间消耗方法。一般用于能够快速执行的函数,因为在这种情况下函数调用的时间消耗显得更为突出。这种方法对于很小的函数也有空间上的益处,并且它也使得一些其他的优化成为可能。

没有了内联函式,程式员难以控制哪些函数内联哪些不内联;由编译器自行决定是否内联。加上这种控制维度准许特定于应用的知识,诸如执行函式的频繁程度,被利用于选择哪些函数要内联。

参考资料:百度百科-内联函数

热心网友 时间:2023-04-27 21:24

楼主有意思,我觉得楼上的答案已经够“官方”的了么...

内联函数就是小型函数,牺牲空间来节省函数调用的开销,一般用作比较小的函数,即函数内部没有循环、开关语句等。内联函数被发明出来就是为了取代C中的宏,因为宏是单纯的替换而没有类型检查所以经常出毛病,比如:

#define MAX(a, b) (a) > (b) ? (a) : (b)

如果你在代码中这样写:

int a = 5, b = 10;

// int max = MAX(++a, b); // a自增了两次
// int max = MAX(++a, b+10); // a自增了一次

a的自增次数竟然由与其比较的数字的大小来决定!?这肯定不是你想要的结果。

所以最好的办法是这样:
template <class T>
inline T max(const T& t1, const T& t2)
{
return t1 > t2 ? t1 : t2;
}

这样的话如果你这样写:

int max = max(a, b);
其实就被替换为了:
int max = a > b ? a : b;
虽然看起来宏差不多,但是比宏多了类型检查,而且内联函数使用的是真正的函数的特性,而不是宏的function-like,模拟函数的功用。

内联函数是为频繁使用、并且过程不大的小型函数设计的,我说了它是以牺牲代码空间来节省函数调用的开销,内联函数使用不当就会造成代码膨胀,所以使用它一定要小心。

建议(书上抄的):
For function-like macros, prefer inline functions to #defines.

楼主有时间还是多看看书好,这里毕竟专家不多,而且也没多少人有太多的时间和精力来帮你解决这些基础性的问题,好好地读几本书吧,一定会让你获益匪浅的...
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
直播间怎么连线 直播间连线有什么好处 2023肇庆端州区中考第二批录取分数线公布 肇庆500分能上什么高中 绿豆沙食用指南 急急!是词语的意思!第二小题!! 蓝牙耳机只有一个耳机有声音 破坏电力设备罪的犯罪构成要件有哪些呢 构成破坏电力设备罪的条件 什么是破坏电力设备罪的构成要件 破坏电力设备罪的构成要件包括哪些 荆门一医和二医哪个做激光去雀斑好些 荆门宏图电子工程有限公司怎么样? 荆门市至强电脑有限公司怎么样? 湖北荆能输变电工程有限公司荆门城区分公司怎么样? 荆门月湖壹品小区主干道变市政大道还继续修吗 荆门有修扬子破壁机修理点吗? 荆门市格林美报废汽车循环利用有限公司怎么样? 湖北荆门共享电动车被的士拖走,这算不算恶性竞争? 荆门有没有好一点的职高,(荆门的)职高都有什么专业? 京山县哪里有华为售后维修点? 荆门电工证怎么考,学电工的学校,维修电工 我2011年1月左右买的DELL 现在电源线坏了,充不进去电。能维修吗?我是在湖北荆门买的,现在在武昌。 荆门有九阳豆浆机维修站吗 荆门掇刀那里有维修电视机的吗 荆门的联想电脑维修店在哪里啊? 荆门城区哪里有修电磁炉的 荆门市钟祥市修电动工具的位置? 荆门城区有修理电击手电筒的修理店吗? 怎样发制鲜牛蹄筋 湖北荆门掇刀荣欣街附近有家电维修部吗荣欣街附近哪里有家电维修店 内置函数和内联函数有什么区别 css中内联怎么解释? 常见的内联元素有哪些 内联函数和成员函数的区别是什么? 内联函数是什么?_? CSS中的 内联 和外联是什么意思 C++中内联函数是什么意思? C++内联函数具体有什么作用? java中方法的内联是怎么回事 什么是内联函数??? 内联函数中可以包括哪些语句? css中内联怎么解释 内联和外联的区别 为什么南美有些地方的人吃土? 如何分清内联和外联的区别 解释数据库中左联,内联,右联的用法 什么时候用内联什么时候用外联? 什么是内联框架 在c语言中内联函数有什么作用 什么叫MYSQL内联表?左联和内联有什么区别?