深入C++中inline关键字的使用

 更新时间:2013年05月23日 17:09:52   作者:  
本篇文章是对C++中inline关键字的使用进行了详细的分析介绍,需要的朋友参考下
一、在C&C++中
  一、inline 关键字用来定义一个类的内联函数,引入它的主要原因是用它替代C中表达式形式的宏定义。   
    表达式形式的宏定义一例:   
    #define ExpressionName(Var1,Var2) ((Var1)+(Var2))*((Var1)-(Var2))为什么要取代这种形式呢,且听我道来:   
    1. 首先谈一下在C中使用这种形式宏定义的原因,C语言是一个效率很高的语言,这种宏定义在形式及使用上像一个函数,但它使用预处
理器实现,没有了参数压栈,代码生成 等一系列的操作,因此,效率很高,这是它在C中被使用的一个主要原因。   
    2. 这种宏定义在形式上类似于一个函数,但在使用它时,仅仅只是做预处理器符号表中的简单替换,因此它不能进行参数有效性的检测
,也就不能享受C++编译器严格类型检查的好处,另外它的返回值也不能被强制转换为可转换的合适的类型,这样,它的使用就存在着一系列的
隐患和局限性。   
    3. 在C++中引入了类及类的访问控制,这样,如果一个操作或者说一个表达式涉及到类的保护成员或私有成员,你就不可能使用这种宏定
义来实现(因为无法将this指针放在合适的位置)。   
    4. inline 推出的目的,也正是为了取代这种表达式形式的宏定义,它消除了它的缺点,同时又很好地继承了它的优点。
 
二、为什么inline能很好地取代预定义呢?
  对应于上面的1-3点,阐述如下:   
    1. inline 定义的类的内联函数,函数的代码被放入符号表中,在使用时直接进行替换,(像宏一样展开),没有了调用的开销,效率也
很高。   
    2.  很明显,类的内联函数也是一个真正的函数,编译器在调用一个内联函数时,会首先检查它的参数的类型,保证调用正确。然后进行
一系列的相关检查,就像对待任何一个真正的函数一样。这样就消除了它的隐患和局限性。      
    3. inline 可以作为某个类的成员函数,当然就可以在其中使用所在类的保护成员及私有成员。在何时使用inline函数:首先,你可以使
用inline函数完全取代表达式形式的宏定义。另外要注意,内联函数一般只会用在函数内容非常简单的时候,这是因为,内联函数的代码会在
任何调用它的地方展开,如果函数太复杂,代码膨胀带来的恶果很可能会大于效率的提高带来的益处。内联函数最重要的使用地方是用于类的
存取函数。

三、如何使用类的inline函数:
  简单提一下inline 的使用吧:   
    1.在类中定义这种函数:  
复制代码 代码如下:

    class ClassName
    {   
        .....   
        ....   
        inlline GetWidth(){return m_lPicWidth;} // 如果在类中直接定义,需用inline修饰   
        ....   
        ....   
   };   

   2.在类中声明,在类外定义:
复制代码 代码如下:

   class ClassName
   {   
    .....   
    ....   
    GetWidth(); // 如果在类外直接定义,可以不使用inline修饰   
    ....   
    ....   
   };  

相关文章

  • C++设计与声明超详细讲解

    C++设计与声明超详细讲解

    C++软件开发可以理解为设计一系列的类,让这些类相互使用,最终实现我们所需要的功能。类与类之间的相互关系可以很复杂,也可以很简单,如何简单高效的描述类与类之间的关系是设计的难点之一。遵循本文所提供的方法,将会给你一些灵感
    2022-09-09
  • C语言字符/字符串相关函数收藏大全

    C语言字符/字符串相关函数收藏大全

    这篇文章主要给大家介绍了关于C语言字符/字符串的相关函数,文中通过示例代码总结的非常详细,对大家学习或者使用C语言具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-04-04
  • 深入了解C语言栈的创建

    深入了解C语言栈的创建

    栈只允许在一端进行插入或删除操作的线性表。首先栈是一种线性表,但是限定这种线性表只能在某一端进行插入和删除操作,这篇文章主要介绍了C语言对栈的实现基本操作
    2021-07-07
  • C++基础知识实例解析(一)

    C++基础知识实例解析(一)

    这篇文章主要对C++基础知识实例解析,通过四个简短的案例,巩固大家的基础知识,需要的朋友可以参考下
    2015-08-08
  • C语言的分支和循环语句你了解吗

    C语言的分支和循环语句你了解吗

    这篇文章主要为大家详细介绍了C语言的分支和循环语句,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • C++详解链栈的实现

    C++详解链栈的实现

    今天我们学习的是链栈,也就是说栈的链式结构,我们运用顺序链的方式来实现。首先呢,链栈是不存在存储空间满的情况的,所以可以说它是个无底洞,然而我们之前学的顺序栈是有额定空间的
    2022-06-06
  • 如何解决C语言,函数名与宏冲突

    如何解决C语言,函数名与宏冲突

    本文介绍了“如何解决C语言,函数名与宏冲突”,需要的朋友可以参考一下
    2013-03-03
  • C语言循环结构与时间函数用法实例教程

    C语言循环结构与时间函数用法实例教程

    这篇文章主要介绍了C语言循环结构与时间函数用法,是C语言中非常重要的一个技巧,需要的朋友可以参考下
    2014-08-08
  • c语言算术运算符越界问题解决方案

    c语言算术运算符越界问题解决方案

    大量的安全漏洞是由于计算机算术运算的微妙细节引起的, 具体的C语言, 诸如符号数和无符号数之间转换, 算术运算的越界都会导致不可预知的错误和安全漏洞, 具体的案例数不胜数.
    2012-11-11
  • Arduino控制舵机详解 附代码

    Arduino控制舵机详解 附代码

    rduino是一款便捷灵活、方便上手的开源电子原型平台,它构建于开放原始码simple I/O介面版,并且具有使用类似Java、C语言的Processing/Wiring开发环境,这篇文章主要介绍了Arduino控制舵机详解(含代码),需要的朋友可以参考下
    2023-05-05

最新评论