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

一、在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修饰   
    ....   
    ....   
   };  

时间: 2024-10-04 09:49:47

深入C++中inline关键字的使用_C 语言的相关文章

C++中inline函数详解_C 语言

本文主要记录了C++中的inline函数,也就是内联函数,主要记录了以下几个问题: 一.C++为什么引入inline函数? 主要目的:用它代替C语言中表达式形式的宏定义来解决程序中函数调用的效率问题. C语言中的宏定义:#define ExpressionName(var1,var2) (var1+var2)*(var1-var2)这种宏定义,它使用预处理器实现,没有了参数压栈.代码生成等一系列得到操作,因此效率很高.但缺点如下: 仅仅是做预处理器符号表中的简单替换,因此不能进行参数有效性的检测

c++中inline的用法分析_C 语言

在函数声明或定义中函数返回类型前加上关键字inline即把min()指定为内联. inline int min(int first, int secend) {/****/};inline函数对编译器而言必须是可见的,以便它能够在调用点内展开该函数.与非inline函数不同的是,inline函数必须在调用该函数的每个文本文件中定义.当然,对于同一程序的不同文件,如果inline函数出现的话,其定义必须相同.对于由两个文件compute.C和draw.C构成的程序来说,程序员不能定义这样的min(

C++二分法在数组中查找关键字的方法_C 语言

本文实例讲述了C++二分法在数组中查找关键字的方法.分享给大家供大家参考.具体如下: /* 此程序演示了二分法查找算法(针对按从小到大排列的数组)的实现. */ #include <iostream> using namespace std; /* 功能: 实现数组的二分法查找(只算法只适合按从小到大排列的数组) 返回值:关键字在数组中的下标, 返回-1表示未找到 a[]: 要搜索的数组 len: 数组元素个数 key: 要查找的关键字 */ int binSearch(int a[], in

详解C++的模板中typename关键字的用法_C 语言

typename的使用场合 用处1, 用在模板定义里, 标明其后的模板参数是类型参数.例如 template<typename T, typename Y> T foo(const T& t, const Y& y){//....}; templace<typename T> class CTest { private: T t; public: //... } 其实,这里最常用的是使用关键字class,而且二者功能完全相同,这里的class和定义类时的class完

从汇编看c++中extern关键字的使用_C 语言

在c++中,extern关键字用来声明变量和函数,在声明函数的时候,有和没有extern的效果一样,即下面两条语句具有同样的效果: 复制代码 代码如下: extern void fun(); void fun(); 但是对于变量,有和没有extern就有区别,当有extern时,只是告知编译器存在这个变量,编译器并不为该变量分配存储空间,即真正的声明:若没有extern,则在声明的同时,编译器也为该变量分配存储空间. 下面是有extern的情形时的c++源码: 复制代码 代码如下: int ma

C/C++中static,const,inline三种关键字详细总结_C 语言

一.关于staticstatic 是C++中很常用的修饰符,它被用来控制变量的存储方式和可见性,下面我将从 static 修饰符的产生原因.作用谈起,全面分析static 修饰符的实质. static 的两大作用: 一.控制存储方式 static被引入以告知编译器,将变量存储在程序的静态存储区而非栈上空间. 引出原因:函数内部定义的变量,在程序执行到它的定义处时,编译器为它在栈上分配空间,大家知道,函数在栈上分配的空间在此函数执行结束时会释放掉,这样就产生了一个问题: 如果想将函数中此变量的值保

c++内联函数(inline)使用详解_C 语言

介绍内联函数之前,有必要介绍一下预处理宏.内联函数的功能和预处理宏的功能相似.相信大家都用过预处理宏,我们会经常定义一些宏,如 复制代码 代码如下: #define TABLE_COMP(x) ((x)>0?(x):0) 就定义了一个宏. 为什么要使用宏呢?因为函数的调用必须要将程序执行的顺序转移到函数所存放在内存中的某个地址,将函数的程序内容执行完后,再返回到转去执行该函数前的地方.这种转移操作要求在转去执行前要保存现场并记忆执行的地址,转回后要恢复现场,并按原来保存地址继续执行.因此,函数调

总结C语言中const关键字的使用_C 语言

什么是const? 常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的.(当然,我们可以偷梁换柱进行更新:) 为什么引入const? const 推出的初始目的,正是为了取代预编译指令,消除它的缺点,同时继承它的优点. const关键字使用非常的灵活,这一点和php差别很大,php中const用来在类中定义一个常量,而在c中,const因位置不同有不同的作用,因情景不同有不同的角色,使用起来也是非常的灵活. (1):const用来修饰普通的变量(指针变量除外)的时

概述C++中的 public protected private friend关键字的用法_C 语言

一个C++类中的变量如果如下关键字作为修饰符. 1. public: 程序的任何地方都可以访问. 2 protected: 只有类本身及其派生类和其友元函数,友元类可以访问. 3 private: 只有类本身及其友元函数,友元类可以访问. 4 friend: 用于定义友元函数友元类. 在类里声明的一个普通函数,在前面加上friend修饰符,这个函数就可以访问该类的一切成员,包括private成员. 下面在看下c++ public private protected关键字 1.当在类的内部使用这三