精华内容
下载资源
问答
  • 引入内联函数的目的
    2021-11-01 11:20:00

    考点

    理解内联函数的作用,为什么要引入内联函数

    出现频率:★★★★

    【解析】
    引入内联函数的主要目的是,用它替代C语言中表达式形式的宏定义来解决程序中函数调用的效率问题。在C语言里可以使用如下的宏定义。

    #define ExpressionName(Var1,Var2)(Var1+Var2)*(Var1-Var2)
    

    这种宏定义在形式及使用上像一个函数,但它使用预处理器实现,没有了参数压栈、代码生成等一系列的操作,因此效率很高。这种宏定义在形式上类似于一个函数,但在使用它时,仅仅只是做预处理器符号表

    更多相关内容
  • 引入内联函数目的和作用

    千次阅读 2015-10-20 21:45:16
    引入内联函数目的是为了解决程序中函数调用的效率问题。 函数是一种更高级的抽象。它的引入使得编程者只关心函数的功能和使用方 法,而不必关心函数功能的具体实现;函数的引入可以减少程序的目标代码,实 现...

    引入内联函数的目的是为了解决程序中函数调用的效率问题。

    函数是一种更高级的抽象。它的引入使得编程者只关心函数的功能和使用方 法,而不必关心函数功能的具体实现;函数的引入可以减少程序的目标代码,实 现程序代码和数据的共享。但是,函数调用也会带来降低效率的问题,因为调用 函数实际上将程序执行顺序转移到函数所存放在内存中某个地址,将函数的程序 内容执行完后,再返回到转去执行该函数前的地方。这种转移操作要求在转去前 要保护现场并记忆执行的地址,转回后先要恢复现场,并按原来保存地址继续执 行。因此,函数调用要有一定的时间和空间方面的开销,于是将影响其效率。特 别是对于一些函数体代码不是很大,但又频繁地被调用的函数来讲,解决其效率 问题更为重要。引入内联函数实际上就是为了解决这一问题。

    在程序编译时,编译器将程序中出现的内联函数的调用表达式用内联函数的 函数体来进行替换。显然,这种做法不会产生转去转回的问题,但是由于在编译 时将函数休中的代码被替代到程序中,因此会增加目标程序代码量,进而增加空 间开销,而在时间代销上不象函数调用时那么大,可见它是以目标代码的增加为 代价来换取时间的节省。

    内联函数的定义方法

    定义内联函数的方法很简单,只要在函数定义的头前加上关键字inline即可 。内联函数的定义方法与一般函数一样。如:

    inline int add_int (int x, int y, int z)

      {

      return x+y+z;

      }

    在程序中,调用其函数时,该函数在编译时被替代,而不是像一般函数那样 是在运行时被调用。

    使用内联函数应注意的事项

    内联函数具有一般函数的特性,它与一般函数所不同之处公在于函数调用的 处理。一般函数进行调用时,要将程序执行权转到被调用函数中,然后再返回到 调用它的函数中;而内联函数在调用时,是将调用表达式用内联函数体来替换。 在使用内联函数时,应注意如下几点:

    1.类内定义的函数是内联函数,类外定义的函数是非内联函数(短函数可以 定义在类内,长函数可以定义在类外)。

    2.可以为类外定义的函数指定 inline 关键字,强行为内联函数。

    3.在内联函数内不允许用循环语句和开关语句。

    4.内联函数的定义必须出现在内联函数第一次被调用之前

    展开全文
  • 内联函数解析

    2022-07-05 23:07:57
    内联函数inline的使用

    1、引入内联函数的目的

    引入内联函数主要是解决一些频繁调用的小函数消耗大量空间(时间)的问题。
    通常情况下,在调用函数时,程序会将控制权从调用程序处转移到被调用函数处,在这个过程中,传递参数、寄存器操作、返回值等会消耗额外的时间和内存,如果调用的函数代码量很少,也许转移到调用函数的时间比函数执行的时间更长。而如果使用内联函数,内联函数会在调用处将代码展开,从而节省了调用函数的开销。

    2、内联函数与宏的差别

    1、宏定义是没有类型检查的,无论对还是错都是直接替换,而内联函数在编译时进行安全检查。
    2、宏定义和内联函数使用的时候都是进行代码展开。不同的是宏定义是在预编译的时候把所有的宏名替换,内联函数则是在编译阶段把所有调用内联函数的地方把内联函数插入。这样可以省去函数压栈清栈,提高了效率。
    内联函数比宏更强大。

    #include <iostream>
    using namespace std;
     
    #define SUM(x) x*x
     
    inline int fun(int x)
    {
    	return x * x;
    }
     
    int main()
    {
    	int a = SUM(2 + 3);
    	int b = fun(2 + 3);
     
    	cout << "a = " << a << endl;
    	cout << "b = " << b << endl;
     
    	system("pause");
    	return 0;
    }
    

    在这里插入图片描述
    为什么通过宏执行的结果是11呢,宏比较机械和简单,只是将传入的参数直接放上去就执行,所以int a = SUM(2 + 3);就相当于int a = 2 + 3 * 2 +3;由于乘法优先级更高,所以得到a的值为11;而在内联函数中,传入的参数是5,所以得到25

    为了得到正确的结果,我们应该将宏改变为:
    ————————————————
    版权声明:本文为CSDN博主「深山里的小白羊」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/qq_33757398/article/details/81390151

    #define SUM(x) ((x)*(x))
    

    3、使用内联函数的注意事项

    1、内联函数一般用于函数体的代码比较简单的函数,不能包含复杂的控制语句,while、switch,并且内联函数本身不能直接调用自身。如果内联函数的函数体过大,编译器会自动的把这个内联函数变成普通函数。
    2、内联函数内不能定义用static修饰的变量。
    3、内联函数只适合于只有1~5行的小函数。
    4、内联函数在使用时最好加static,因为内联函数虽然用inline定义了,但此函数是否按照内联函数处理需要编译器确定,如果定义的内联函数比较复杂,编译器有可能在编译时不会把内联函数展开,一般内联函数都定义在.h文件中,如果编译时不按照内联函数处理,势必会导致包含此头文件的文件都定义了此内联函数,函数被重复定义了,就会报错。

    展开全文
  • C++之 内联函数

    2022-07-20 10:03:52
    在C语言中我们可以使用宏和函数,但是它们都有其自身的缺点。那C++中有没有一种技术既可以整合它们其中的优点、又弥补了他么的缺点呢?那就是本篇文章介绍的C++内联函数。我们一起来看看吧~~~~......

    目录

    一、 内敛函数的概念

    二、 查看内联函数

    三、 内联函数的特性

    四、 宏和内联函数


    一、 内敛函数的概念

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

    例如:

    短小的函数 ( 1--10行 ) 

    频繁调用    ( 10 万 次)     

    场景: 堆排序和快速排序中 ,频繁被调用的swap函数。

    作用:作为C++中新引入的功能,其目的就是为了弥补C语言中宏函数的不足。


    二、 查看内联函数

    例如我们在 mian 函数中调用 Add函数,如果我们不使用 inline ,那在执行到 Add 函数时,编译器会 call Add函数,以下是我们不加 inline 的情况下编译器的调用情况,

     很明显,反汇编中出现了 call 指令,说明是调用了 Add 函数的。

    接下来,我们在 Add 函数前加上 inline 查看内联函数是否会在调用它的地方直接展开。

    首先我们来在 Debug 模式下配置一下,这样才能看到展开的情况。

    选择程序数据库(/Zi)

     

    配置好了之后,我们再来看看反汇编,这时,就没有 call Add函数了,而是直接在函数内部开始执行, 这就是 inline 的功能。


    三、 内联函数的特性

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

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

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

    上图这样声明和定义分离就会报出链接错误。

    可将内联函数的定义直接放在头文件中,例如:

    或者不加声明,直接定义


    四、 宏和内联函数

    宏的优缺点:

    优点:

    • 增强代码的复用性
    • 提高性能,宏函数提高效率,减少栈帧的建立

    缺点:

    • 不方便调试宏。
    • 可读性差
    • 没有类型安全的检查

    我们便可以使用C++中一些技术来弥补宏的不足

    C++中有哪些技术替代宏:

    1. 常量定义换用const enum。
    2. 短小函数的定义,换用内联函数实习。

    展开全文
  • 在c中我们经常把一些短并且执行频繁的计算写成宏,而不是函数,这样做的理由是为了执行效率,宏可以避免函数调用的开销,这些都由预处理来完成。 但是在c++出现之后,使用预处理宏会出现两个问题: 1.第一个在c中...
  • C++ 内联函数与引用变量
  • C++ | 内联函数

    2020-09-13 00:59:40
    内联函数在编译时进行展开,在调用点出产生一个...引入内联函数目的是为了解决程序中函数调用的效率问题,函数的调用会有函数栈帧的开辟和函数内资源的回收处理产生的开销。如果函数功能比较简单,如整数比较大小函
  • 1, 在c语言中内联函数有什么作用1.内联函数可减少cpu的系统开销,并且程序的整体速度将加快,但当内联函数很大时,会有相反的作用,因此一般比较小的函数才使用内联函数.2.有两种内联函数的声明方法,一种是在函数前...
  • 友元函数,内联函数

    2018-10-13 00:25:52
    类的友元函数是定义在类外部,但有权访问类的所有私有(private)成员和保护(protected)成员。尽管友元函数的原型有在类的定义中出现过,但是友元函数并不是成员函数。 友元可以是一个函数,该函数被称为友元函数...
  • Kotlin 内联函数

    2021-04-18 04:08:03
    一、内联函数原理使用高阶函数为开发带来了便利,但同时也产生了一些性能上的损失,官方是这样描述这个问题:使用高阶函数会带来一些运行时的效率损失:每一个函数都是一个对象,并且会捕获一个闭包。 即那些在函数...
  • C++ 内联函数

    2022-01-08 16:22:40
    C++ 内联函数 C++ 内联函数是通常与类一起使用。如果一个函数是内联的,那么在编译时,编译器会把该函数的代码副本放置在每个调用该函数的地方。 对内联函数进行任何修改,都需要重新编译函数的所有客户端,因为...
  • C++内联函数概述

    千次阅读 2020-12-21 17:03:22
    引入内联函数目的是为了解决程序中函数调用的效率问题。  内联函数是C++中的一种特殊函数,它可以像普通函数一样被调用,但是在调用时并不通过函数调用的机制而是通过将函数体直接插入调用处来实现的,这样可以...
  • 内联函数

    2017-04-10 23:13:09
     引入内联函数的主要目的是,用它替代c语言中表达式形式的宏定义来解决程序中函数调用的效率问题,在c语言里可以使用如下的宏定义: #define ExpressionName(Var1,Var2) (Var1+Var2)*(Var1-Var2) 这种宏定义在形式...
  • C语言内联函数

    千次阅读 2019-06-06 17:19:41
    引入内联函数目的是为了解决程序中函数调用的效率问题。 函数是一种更高级的抽象。它的引入使得编程者只关心函数的功能和使用方法,而不必关心函数功能的具体实现;函数的引入可以减少程序的目标代码,实现程序...
  • C++中的内联函数

    2020-08-01 20:42:46
    c++中引入内联函数目的是:提高程序运行速度 内联函数是怎样提高运行速度的 在常规函数调用时,首先要将函数参数保存到栈中,然后将实参赋值给形参,再将函数的返回地址(该地址是函数执行结束后,程序继续执行的...
  • 1:引入内联函数的主要目的是,用它替代C语言中表达形式的宏定义来解决程序中函数调用的效率问题。在C语言里可以使用如下的宏定义: #define ExpressionName(Var1,Var2) (Var1+Var2)*(Var1-Var2) 这种宏定义在...
  • 在类里面实现的也称为内联函数内联函数在调用函数处用内联函数体的代码来替换,并不是像一般函数,转去执行被调用的函数体,执行完后再返回调用函数,这样会提高运行速度,内联函数和带参数的宏定义代码效率是...
  • 编译时多态:主要指函数的重载,包括运算符的重载、对重载函数的调用,在编译时根据实参确定调用那个函数 运行时多态:基类的指针可以指向派生类对象。但是基类指针只能访问派生类的成员变量,不能访问派生类的...
  • 内联函数与宏定义的函数很相似,都是在运行前,先将一些简短的函数,直接替换为实现代码,以此来省去函数调用时,参数入栈、程序跳转等的时间开支。 宏定义的函数: 使用宏定义#define定义的函数。其在预编译阶段就...
  • C++ --- 内联函数,函数的默认参数,函数的占位参数,函数重载,类和对象的基本概念一. 内联函数(inline function)1. 内联函数的引出2. 预处理宏的缺陷3. 内联函数二. 数的默认参数三. 函数的占位参数四. 函数重载五...
  • 内联函数是C++语言新引入的概念。其目的是为了提高函数的执行效率。宏是C++从它的前辈C继承而来的,宏同样可以提高代码的执行效率,减少函数执行过程中的调用开销。不是所有函数都适合声明为内联函数。即使声明为...
  • 目录 一 标准函数 1.1 let 1.2 with 1.3run 1.4apply 二扩展函数 2.1 扩展函数基本使用 2.2 运算符重载 2.3 最佳实践:扩展函数和...四 内联函数inline 4.1noinline 4.2crossinline 一 标准函数 Kotl...
  • c++中内联函数

    2020-05-19 18:12:20
    内联函数inline:引入内联函数目的是为了解决程序中函数调用的效率问题,这么说吧,程序在编译器编译的时候,编译器将程序中出现的内联函数的调用表达式用内联函数的函数体进行替换,而对于其他的函数,都是在运行...
  • 什么是内联函数

    千次阅读 多人点赞 2018-11-04 22:34:15
    内联函数inline:引入内联函数目的是为了解决程序中函数调用的效率问题,这么说吧,程序在编译器编译的时候,编译器将程序中出现的内联函数的调用表达式用内联函数的函数体进行替换,而对于其他的函数,都是在运行...
  • 宏定义,宏函数和内联函数

    千次阅读 2021-08-14 08:13:21
    宏定义,宏函数和内联函数宏是什么:简单宏替换出现的问题:带参数的宏定义(宏函数):宏的优点:宏的缺陷,内联函数的引入内联函数(空间换时间) 宏是什么: 宏(#define)命令是C语言中的一个宏定义命令,它用来...
  • 当然,引入内联函数的主要目的是:解决程序中函数调用的效率问题。另外,前面我们讲到了宏,里面有这么一个例子:#define ABS(x) ((x)>0? (x):-(x))当++i出现时,宏就会歪曲我们的意思,换句话说就是:宏的定义很...
  • 【C++】3-1.20 内联函数

    2021-04-11 00:03:58
    【C++】3-1.20 内联函数内联函数的定义二级目录三级目录 内联函数的定义 内联函数:Inline Functions 定义函数时,在函数类型前面加上 inline 关键字,则该函数就成为内联函数。 注意:内联函数不可以将函数的原型...
  • 为了减少函数调用的开销,引入内联函数进制。编译器处理对内敛函数的调用语句时,是将整个函数的代码插入到调用语句处,而不会产生调用函数的与语句。 在函数定义前面加“inline”关键字,即可定义内联函数 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 15,584
精华内容 6,233
热门标签
关键字:

引入内联函数的目的