`
lc52520
  • 浏览: 369245 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

inline函数

J# 
阅读更多

   介绍内联函数之前,有必要介绍一下预处理宏。内联函数的功能和预处理宏的功能相似。相信大家都用过预处理宏,我们会经常定义一些宏,如
#define TABLE_COMP(x) ((x)>0?(x):0)
就定义了一个宏。

  为什么要使用宏呢?因为函数的调用必须要将程序执行的顺序转移到函数所存放在内存中的某个地址,将函数的程序内容执行完后,再返回到转去执行该函数前的地方。这种转移操作要求在转去执行前要保存现场并记忆执行的地址,转回后要恢复现场,并按原来保存地址继续执行。因此,函数调用要有一定的时间和空间方面的开销,于是将影响其效率。而宏只是在预处理的地方把代码展开,不需要额外的空间和时间方面的开销,所以调用一个宏比调用一个函数更有效率。

  但是宏也有很多的不尽人意的地方。

  1、.宏不能访问对象的私有成员。

  2、.宏的定义很容易产生二意性。

  我们举个例子:

#define TABLE_MULTI(x) (x*x) 


  我们用一个数字去调用它,TABLE_MULTI(10),这样看上去没有什么错误,结果返回100,是正确的,但是如果我们用 TABLE_MULTI(10+10)去调用的话,我们期望的结果是400,而宏的调用结果是(10+10*10+10),结果是120,这显然不是我们要得到的结果。避免这些错误的方法,一是给宏的参数都加上括号。

#define TABLE_MULTI(x) ((x)*(x)) 


我们可以看到宏有一些难以避免的问题,怎么解决呢?

  下面就是用我要介绍的内联函数来解决这些问题,我们可以使用内联函数来取代宏的定义。而且事实上我们可以用内联函数完全取代预处理宏。

  内联函数和宏的区别在于,宏是由预处理器对宏进行替代,而内联函数是通过编译器控制来实现的。而且内联函数是真正的函数,只是在需要用到的时候,内联函数像宏一样的展开,所以取消了函数的参数压栈,减少了调用的开销。你可以象调用函数一样来调用内联函数,而不必担心会产生于处理宏的一些问题。

  我们可以用Inline来定义内联函数,不过,任何在类的说明部分定义的函数都会被自动的认为是内联函数。
下面我们来介绍一下内联函数的用法。

  内联函数必须是和函数体申明在一起,才有效。像这样的申明Inline Tablefunction(int I)是没有效果的,编译器只是把函数作为普通的函数申明,我们必须定义函数体。

Inline tablefunction(int I) {return I*I}; 


  这样我们才算定义了一个内联函数。我们可以把它作为一般的函数一样调用。但是执行速度确比一般函数的执行速度要快。

  我们也可以将定义在类的外部的函数定义为内联函数,比如:
Class TableClass{
 Private:
  Int I,j;
 Public:
  Int add() { return I+j;};
  Inline int dec() { return I-j;}
  Int GetNum();
}
inline int tableclass::GetNum(){
return I;
}

  
    上面申明的三个函数都是内联函数。在C++中,在类的内部定义了函数体的函数,被默认为是内联函数。而不管你是否有inline关键字。

  内联函数在C++类中,应用最广的,应该是用来定义存取函数。我们定义的类中一般会把数据成员定义成私有的或者保护的,这样,外界就不能直接读写我们类成员的数据了。对于私有或者保护成员的读写就必须使用成员接口函数来进行。如果我们把这些读写成员函数定义成内联函数的话,将会获得比较好的效率。
Class sample{
 Private:
  Int nTest;
 Public:
  Int readtest(){ return nTest;}
 Void settest(int I) {nTest=I;}

  当然,内联函数也有一定的局限性。就是函数中的执行代码不能太多了,如果,内联函数的函数体过大,一般的编译器会放弃内联方式,而采用普通的方式调用函数。这样,内联函数就和普通函数执行效率一样了。
分享到:
评论

相关推荐

    inline函数说明(转载)

    ### inline函数:优化与陷阱 在C++编程中,`inline`关键字的使用是一个重要的优化技术,它旨在减少函数调用的开销,提高代码执行效率。本文将深入探讨`inline`函数的工作原理、使用场景及其潜在的陷阱,帮助开发者...

    inline-in-iar_c.rar_iar inline 函数_iar 内联函数_msp430f4152

    在IAR C中,内联函数的定义通常使用关键字`inline`。下面我们将深入探讨如何在IAR C中使用内联函数以及它们与MSP430F4152微控制器的结合。 首先,让我们看看如何定义一个内联函数。在C语言中,内联函数的定义方式...

    每天学点C++(C++实例教程:教程+源码)inline函数.zip

    2. **使用inline函数的优势**: - 提升性能:由于消除了函数调用的开销,内联函数通常比常规函数更快。 - 避免栈帧分配和恢复:函数调用通常会涉及栈帧的创建和销毁,内联避免了这些操作。 - 更少的间接跳转:...

    C++中inline函数详解

    C++中的inline函数是一种特殊的函数,其主要目的是提高程序的执行效率。内联函数的定义是在函数声明或定义时在其返回类型前加上`inline`关键字。这样做的目的是告诉编译器,希望它在可能的情况下在调用点直接展开...

    内联函数inline使用实例

    内联函数(inline)在C++编程语言中是一种优化手段,用于提高程序的运行效率。它的主要作用是在编译期间将函数体插入到每个调用该函数的地方,从而避免了函数调用时的开销,如函数调用的压栈、跳转以及返回等过程。...

    详解恢复Inline Hook源码

    它通常用于性能敏感的场景,因为inline函数可以消除函数调用的开销。然而,Inline Hook也会带来问题,比如当程序被Hook后,原始函数的行为可能会丢失,因此恢复Inline Hook显得至关重要。 首先,我们要理解Inline ...

    C语言的inline.pdf

    1. `static inline`:这种形式的inline函数类似于一个具有inline属性的静态(static)函数。这意味着函数的作用域限制在定义它的源文件内部,可以避免链接时的重复定义问题。在大多数情况下,GCC会在函数调用处进行...

    简单的inlinehook类

    - **性能影响**:inline函数可能会增大可执行文件大小,且过度的inline可能导致性能下降,因为编译器可能会无法优化代码。 总之,“简单的inlinehook类”是一种用于动态改变程序行为的技术,通过在编译时将自定义...

    matlab中diff函数.pdf

    今天,我们将讨论 diff 函数和匿名函数的使用,特别是当我们使用 inline 函数和 @ 符号时需要注意的一些问题。 首先,让我们看一下给定的代码: ```matlab clc; clear; syms x; y = x^3 + 2*x^2 + x + 1; dy = ...

    (完整word版)matlab中函数定义.docx

    Inline函数的执行速度快,因为它们直接基于MATLAB的数值内核,但只适用于数值操作,不支持符号计算。 4. **Syms + subs**: 使用`syms`定义符号变量,然后通过`subs`进行替换。这种方式适合于符号运算,例如: ``...

    浅谈C++中的几个关键字static,const,inline.doc

    inline 函数的主要作用是将函数体复制到函数调用的地方,从而提高函数的执行效率。 static、const 和 inline 是 C++ 中非常重要的关键字,它们在程序设计中扮演着非常重要的角色。 static 关键字的详细解释: ...

    【工科】matlab数据处理中常用函数的用法 (2).pdf

    MATLAB 数据处理中常用函数的用法 ...MATLAB 数据处理中常用函数的用法包括 fsolve 函数、nlinfit 函数、optimset 函数、inline 函数、load 函数和 subs 函数等。这些函数可以帮助用户快速地实现数据处理和分析任务。

    宏(#define)定义函数妙用

    在C/C++编程中,宏定义(#define)是一种预处理器指令,用于创建符号常量或简单的文本替换。宏在程序编译时起作用,它...在实际编程中,结合宏和其他语言特性,如模板、inline函数,可以编写出更高效、更易维护的代码。

    52_虚函数可以声明为inline吗1

    在C++编程语言中,内联函数(inline)和虚函数(virtual)是两种非常重要的特性,它们分别用于优化性能和实现多态性。然而,它们的性质和使用场景是不同的,这导致了某些限制,比如虚函数通常不建议声明为内联。下面...

    c++的常用函数使用手册

    6. **inline函数**:为了优化性能,C++提供`inline`关键字,请求编译器展开函数调用。这通常用于小的、频繁调用的函数,以减少调用开销。 7. **异常处理**:C++的异常处理机制允许程序员定义和捕获运行时错误,使用...

    C语言的inline内联函数的作用

    通过使用`inline`关键字,程序员向编译器发出请求,希望在编译时将函数体插入到每个调用该函数的地方,而不是在运行时通过函数调用来执行。这种做法可以消除函数调用时的开销,比如保存和恢复寄存器状态、压栈和出栈...

    好用的c函数查询软件

    C99是C语言的一个重要版本,引入了许多新特性,如复数类型、变量声明的自由度增加、inline函数、新的数据类型等。而库函数则是C语言编程的基础,它们是预先编译好的代码,程序员可以通过调用来实现各种功能,如输入...

    【工科】matlab数据处理中常用函数的用法.pdf

    inline 函数是MATLAB中用于创建内联函数的函数。该函数可以用来创建简洁的函数定义。其基本语法为: `g = inline('sin(2*pi*f + theta)','f','theta')` 其中,`sin(2*pi*f + theta)`是函数定义,`f`和`theta`是...

    matlab函数定义和调用问题-【Matlab算法】.pdf

    6. **Inline函数**:Inline函数是内联函数,可以直接用字符串定义函数表达式,不需要单独的`.m`文件。它们在运行时效率较高,因为它们是基于MATLAB的数值运算内核的。例如,`f=inline('x^2+y','x','y')`,然后用`f(2...

Global site tag (gtag.js) - Google Analytics