`
beckshanling
  • 浏览: 262789 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论

内联函数和宏

    博客分类:
  • C++
阅读更多

第一部分:宏
为什么要使用宏呢?
因为函数的调用必须要将程序执行的顺序转移到函数所存放在内存中的某个地 址,将函数的程序内容执行完后,再返回到转去执行该函数前的地方。这种转移操作要求在转去执行前要保存现场并记忆执行的地址,转回后要恢复现场,并按原来 保存地址继续执行。因此,函数调用要有一定的时间和空间方面的开销,于是将影响其效率。
而宏只是在预处理的地方把代码展开,不需要额外的空间和时间方面的开销,所以调用一个宏比调用一个函数更有效率。
但是宏也有很多的不尽人意的地方。
1、宏不能访问对象的私有成员。
2、宏的定义很容易产生二意性。
我们举个例子:
#define square(x) (x*x)
我 们用一个数字去调用它,square(5),这样看上去没有什么错误,结果返回25,是正确的,但是如果我们用squre (5+5)去调用的话,我们期望的结果是100,而宏的调用结果是(5+5*5+5),结果是35,这显然不是我们要得到的结果。避免这些错误的方法,一 是给宏的参数都加上括号。
#define square(x) ((x)*(x))

第二部分:内联函数
从上面的阐述,可以看到宏有一些难以避免的问题,怎么解决呢?
内联函数是代码被插入到调用者代码处的函数。如同 #define 宏,内联函数通过避免被调用的开销来提高执行效率,尤其是它能够通过调用(“过程化集成”)被编译器优化。
内 联函数和宏很类似,而区别在于,宏是由预处理器对宏进行替代,而内联函数是通过编译器控制来实现的。而且内联函数是真正的函数,只是在需要用到的时候,内 联函数像宏一样的展开,所以取消了函数的参数压栈,减少了调用的开销。你可以象调用函数一样来调用内联函数,而不必担心会产生于处理宏的一些问题。
声明内联函数看上去和普通函数非常相似:
void f(int i, char c);
当你定义一个内联函数时,在函数定义前加上 inline 关键字,并且将定义放入头文件:
inline void f(int i, char c)
{
// ...
}
内联函数必须是和函数体申明在一起,才有效。
像这样的申明inline function(int i)是没有效果的,编译器只是把函数作为普通的函数申明,我们必须定义函数体。
inline int function(int i) {return i*i;}
这样我们才算定义了一个内联函数。我们可以把它作为一般的函数一样调用。但是执行速度确比一般函数的执行速度要快。
当然,内联函数也有一定的局限性。就是函数中的执行代码不能太多了,如果,内联函数的函数体过大,一般的编译器会放弃内联方式,而采用普通的方式调用函数。这样,内联函数就和普通函数执行效率一样了。
有上面的两者的特性,我们可以用内联函数完全取代预处理宏。

 

析构函数也可以作为内联函数使用

 

分享到:
评论

相关推荐

    内联函数和宏的区别的分析与总结

    内联函数和宏在C++编程语言中是两种常见的代码优化技术,它们都可以用来替代函数调用,以减少函数调用带来的开销。然而,两者在实现方式、编译过程和功能特性上有着显著的区别。 首先,我们来看内联函数。内联函数...

    c++中的宏、内联函数和宏的比较

    ### C++中的宏、内联函数和宏的比较 在C++编程中,宏和内联函数是提高代码效率和可读性的两种常见方法。它们各自有着不同的应用场景和特点,了解这些差异对于编写高质量的C++代码至关重要。 #### 宏(Macro) 宏...

    预处理宏和内联函数的区别

    预处理宏和内联函数在C/C++编程中都是为了提升程序效率而设计的工具,但它们在使用上有着本质的区别。本文将深入探讨这两种技术,帮助开发者更好地理解和利用它们。 首先,预处理宏是一种在编译之前进行的文本替换...

    对内联函数与普通函数的一些比较与分析.doc

    例如,在处理简单的数学运算或者访问控制时,内联函数往往能提供更快的执行速度,因为它的执行过程类似于宏替换,而不必承担函数调用的额外开销。 然而,内联函数的这一优势也伴随着潜在的缺点。由于内联函数的代码...

    内联函数笔记

    内联函数的设计目标是替代C语言中的宏定义,克服宏定义的一些弊端,同时保留其效率优势。 在C语言中,宏定义(如`#define ExpressionName(Var1, Var2) ((Var1)+(Var2))*((Var1)-(Var2))`)通过预处理器进行文本替换...

    宏和内联函数的作用和用法

    在C语言编程中,宏和内联函数是两种常见的代码优化技术,它们都可以用来提高程序的执行效率。本文将详细探讨宏和内联函数的作用、用法及其在实际编程中的应用。 宏,全称为预处理器宏,是C语言中预处理器(cpp)的...

    浅谈内联函数与宏定义的区别详解

    内联函数在运行时可调试,而宏定义不可以;2.编译器会对内联函数的参数类型做安全检查或自动类型转换(同普通函数),而宏定义则不会; 3.内联函数可以访问类的成员变量,宏定义则不能; 4.在类中声明同时定义的成员...

    内联函数与普通函数的区别

    内联函数和宏的区别在于,宏是由预处理器对宏进行替代,而内联函数是通过编译器控制来实现的。宏和内联函数都可以提高执行效率,但宏的执行效率高于内联函数,因为宏是在编译器之前进行处理的,而内联函数是在编译器...

    宏和内联函数的区别[归类].pdf

    在编程领域,宏和内联函数是两种常用的代码优化手段,它们都能在一定程度上提高程序的执行效率。然而,它们的实现方式和使用场景各有不同,理解这些差异有助于编写更高效且安全的代码。 首先,预处理宏是C/C++语言...

    C语言中的内联函数(inline)与宏定义(#define)详细解析

    内联函数和宏定义在C语言中都是用来优化程序性能的工具,但它们在使用上有着本质的区别。内联函数提供了更加安全和可调试的代码替代宏定义,尤其是在需要兼顾性能和代码可读性的场景下。 内联函数是C++引入的概念,...

    C语言中的宏定义与内联函数:深入理解与实践

    宏定义和内联函数都可以用来提高代码的执行效率,但它们在实现方式和使用场景上有所不同。宏定义在预处理阶段进行文本替换,不进行类型检查,而内联函数在编译时进行类型检查。宏定义适用于简单的代码替换,而内联...

    C++语言内联函数的引出-宏函数的缺陷.zip

    在C++编程语言中,内联函数的引入主要与宏函数的缺陷有关。宏函数是C++中的一个预处理器特性,允许程序员定义可替换的文本片段。然而,宏函数在某些情况下存在一些固有问题,这使得C++引入了内联函数作为更安全、更...

    VC中内联函数的定义和案例共3页.pdf.zip

    5. 阐述内联函数与宏定义的差异,以及为什么内联函数通常比宏更安全。 通过阅读“VC中内联函数的定义和案例共3页.pdf”文档,开发者可以获得深入理解,知道何时何地适当地使用内联函数来优化代码,提高程序性能。...

    深入探讨:宏、内联函数与普通函数的区别

     内联函数与带参数宏定义的另一个区别是,内联函数的参数类型和返回值类型在声明中都有明确的指定;而带参数宏定义的参数没有类型的概念,只有在宏展开以后,才由编译器检查语法,这就存在很多的安全隐患。 使用...

    三内联函数inlinefunction四引用和数值传递方式具体PPT课件.pptx

    内联函数的一个主要用途是解决`private`或`protected`访问权限带来的问题,它可以被用在类的成员函数中,提供类似于宏的代码重用,同时保持封装性,避免宏展开可能带来的副作用。 以下是一个简单的`swap`函数的例子...

    内联函数的使用_内联函数的使用_

    MATLAB中的内联函数借鉴了C语言中的内联函数,在C语言中,内联函数是通过编译器控制来实现的,它只在需要用到的时候,内联函数像宏一样的展开,所以取消了函数的参数压栈,减少了调用的时间和空间开销。在MATLAB中也...

    C++编程中队内联函数的理解和使用

    这类似于宏展开,但内联函数提供了更多安全性和灵活性。 **内联函数的定义与使用** 内联函数的定义通常使用`inline`关键字,例如: ```cpp inline int min(int v1, int v2) { return (v1 ) ? v1 : v2; } ``` 内联...

    内联函数inline与宏定义深入解析

    内联函数和宏定义是C++中两种用于优化程序性能的技术,它们都能在一定程度上减少函数调用带来的开销。然而,两者之间存在着显著的区别。 首先,内联函数(inline)是C++的一个特性,它允许函数的代码在编译时被插入...

Global site tag (gtag.js) - Google Analytics