c inline函数,C++中inline

c inline函数,C++中inline,C++中inline函数详解

内联函数的定义:在函数声明或定义中,在函数返回类型前加上关键字inline,即可以将函数指定为内联函数。内联函数必须对编译器可见,这样它才能在调用点扩展该函数。

本文主要记录C中的内联函数,即inline函数,主要记录以下问题:

一、C++为什么引入inline函数?

主要目的是用它代替C语言中表达式形式的宏定义来解决程序中函数调用的效率问题。

C中的宏定义:# DEFINE EXPRESSION NAME (VAR1,VAR2) (VAR1VAR2) * (VAR1-VAR2)这个宏定义是由一个预处理器实现的,没有参数堆栈、代码生成等一系列操作,效率很高。但是缺点如下:

只是在预处理器符号表中进行了简单的替换,无法检查参数的有效性,无法享受C编译器严格类型检查的好处。

此外,它的返回值不能强制转换为可转换类型。

再者,C引入了类和类访问控制,这样如果一个操作或表达式涉及到一个类的受保护成员或私有成员,这个宏定义就无法实现了(因为this指针放不到合适的位置)。

二、为什么inline能很好的取代表达式形式的预定义?

Inline定义一个类的内联函数,函数的代码放在符号表中。用的时候可以直接替换(像宏一样展开),没有调用的开销,效率也高。

类的内联函数也是实函数。当编译器调用内联函数时,它首先执行一系列测试(参数类型)。

内联函数可以用作类的成员函数,这样类的受保护成员和私有成员都可以在其中使用。

三、inline函数的使用场合

示例代码:

从上面的示例代码可以看出,A类的两个成员函数是内联函数,readTest()函数的定义在类中,所以自动转换为内联函数,setTest()函数的定义在类外,所以必须添加inline关键字。类成员往往被定义为protected和private,不能被外界直接访问,必须通过成员接口函数访问。这些接口函数被定义为内联函数,这样会得到更好的结果。所以常用inline function来定义access function(短代码),效率比较高。

四、为什么不把所有的函数定义成inline函数?

内联是等待代码的扩展(复制),只节省函数调用的开销,从而提高函数执行的效率。如果执行函数体中代码的时间比函数调用的成本长,那么效率的增益会非常小。另一方面,内联函数的每次调用都需要复制代码,增加了程序的总代码量,消耗了更多的内存空间。

所以:

当函数的代码很大时,使用内联函数会使内存消耗更加昂贵。

如果函数中有循环,执行函数的时间就比调用函数的开销要长。

此外,类的构造函数和析构函数很容易被误解,因为使用内联更有效。注意构造函数和析构函数可能隐藏了一些行为,比如“秘密执行基类或成员对象的构造函数和析构函数。”

好的编译器会根据函数体自动取消不合适的内联函数。(解释内联不应该出现在类内部,以及函数的声明部分)

五、inline函数与宏的区别?

内联是在编译时展开的,而宏是在预编译时展开的。

在编译时,内联函数可以直接嵌套到目标代码中,而宏只是简单的文本替换。

inline函数可以完成类型和语句是否正确,而宏没有这样的函数。

内联函数是函数,而宏不是函数。

在定义宏的时候,要注意参数的处理(通常参数都是用括号括起来的),否则会造成歧义,内联函数也不用担心歧义。

以上是本文的全部内容。我希望你能喜欢它。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • vs2015打包安装程序,vs2015程序打包,VS2022实现VC++打包生成安装文件图文详细历程
  • vc++6.0的快捷键,vc 快捷键
  • vc++6.0的快捷键,vc 快捷键,VC6.0常用快捷键大全
  • 绘制圆角矩形的方法,c++ 画矩形,C#画圆角矩形的方法
  • 懒汉式和饿汉式代码,单列模式懒汉和饿汉,C++单例模式的懒汉模式和饿汉模式详解
  • 好用的C++编译器,c++编译软件哪个好
  • semaphore c#,c++ semaphore
  • semaphore c#,c++ semaphore,C++中Semaphore内核对象用法实例
  • dev-c++使用教程,dev c++安装教程
  • dev-c++使用教程,dev c++安装教程,Dev C++ 安装及使用方法(图文教程)
  • C里面指针常量和常量指针的区别,c++指针常量和常量指针
  • C里面指针常量和常量指针的区别,c++指针常量和常量指针,简单总结C++中指针常量与常量指针的区别
  • com组件初始化失败,c#开发com组件,C++中COM组件初始化方法实例分析
  • c++静态成员变量使用,c++静态成员函数和静态成员变量
  • c++静态成员变量使用,c++静态成员函数和静态成员变量,详解c++ 静态成员变量
  • 留言与评论(共有 条评论)
       
    验证码: