一、在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{
  .....
  ....
  GetWidth(){return m_lPicWidth;}; // 如果在类中直接定义,可以不使用inline修饰
  ....
  ....
  }
  2.在类中声明,在类外定义:
  class ClassName{
  .....
  ....
  GetWidth(); // 如果在类中直接定义,可以不使用inline修饰
  ....
  ....
  }
  inline return_type ClassName::GetWidth(){
  return m_lPicWidth;

  }

inline 内联函数详解 内联函数与宏定义的区别相关推荐

  1. php output详解,PHP输出缓冲控制Output Control系列函数详解,output函数详解

    PHP输出缓冲控制Output Control系列函数详解,output函数详解 概述 以前研究过PHP的输入输出缓冲,不过博客搬家以后,原来文章找不到了,今天看到一篇好文,顺便转载过来. 简介 说到 ...

  2. MaxCompute SQL函数详解 ODPS SQL函数详解---之日期相关函数

    MaxCompute SQL函数详解 ODPS SQL函数详解 日期函数 to_date函数 返回类型:datetime 语法:to_date(类型 参数1,类型 参数2);to_date(strin ...

  3. MaxCompute SQL函数详解 ODPS SQL函数详解---之常用数学运算相关函数

    MaxCompute SQL函数详解 ODPS SQL函数详解---之常用数学运算相关函数 MaxCompute/ODPS SQL常用数学运算相关函数 ABS函数-计算绝对值 sql:select A ...

  4. mysqlsum绝对值_MySQL_MySQL笔记之数学函数详解,绝对值函数ABS(x)和圆周率函数P - phpStudy...

    MySQL笔记之数学函数详解 绝对值函数ABS(x)和圆周率函数PI() mysql> SELECT ABS(0.5), ABS(-0.5), PI(); +----------+------- ...

  5. c++:内联函数详解和普通函数的区别

    文章目录 前言 Ⅰ.常规函数 Ⅱ.内联函数 1.语法 2.注意 Ⅲ.选择地使用内联 思考? 前言 内联函数是c++为了提高程序的运行速度做的改进,它与普通函数区别在于: 编译器如何将它们组合到程序中. ...

  6. python自定义函数详解_Python自定义函数

    自定义函数 使用def定义函数,例如: def my_abs(x) : if x >= 0 : return x else : return -x 函数可以返回多个值,但是这是假象,实际上函数返 ...

  7. c语言函数详解1——自定义函数

    这篇文章理论性知识比较多,不过对于初学者对于函数的理解会有更深层次的帮助 目录 c语言的函数--子程序 自定义函数 c语言的函数--子程序 *是大型程序中的某部分代码,由一个或者多个语句组成,她负责完 ...

  8. php 时间函数详解,PHP时间函数date()详解

    html> /* php语言中默认设置的是标准的格林威治时间(即采用的是零时区),与我们本地的时间相差8个小时.所以要获取本地当前时间必须要更改PHP语言中的时区设置,只需在date()函数前加 ...

  9. python的groupby中函数详解_python groupby函数用法

    import pandas as pd io = r'C:\Users\Administrator\Desktop\ceshi\ceshi.xlsx' data0 = pd.read_excel(io ...

最新文章

  1. 机器学习:循环神经网络知识要点
  2. 关于RecyclerView
  3. Java集合框架:Set(HashSet,LinkedHashSet,TreeSet)
  4. matlab图像去毛刺_信号去毛刺,去零漂
  5. RabbitMQ获取队列的消息数目
  6. 华为正式发布自有操作系统——鸿蒙 OS!
  7. mysql 查询 更新属性值_MySQL-在一个查询中更新具有不同值的多行
  8. zabbix 监控基础
  9. matlab设计低通滤波器
  10. 编程实现DBSCAN密度聚类算法,并以西瓜数据集4.0为例进行聚类效果分析
  11. ssd1306.py
  12. html无法显示echarts地图,pyecharts 地图不显示问题
  13. 提高免疫力吃什么 多吃奶制品
  14. java mail 20m附件,发送邮件时附件大小不能超过20M,否则无法发送
  15. 树莓派CM4封装AD底座使用分享
  16. 中晋最新消息2020年_油价调整最新消息:今天油价再次创出2020年新低
  17. 【笔试】计算机网络知识点整理
  18. vue2源码解读笔记(一)
  19. 现代大学英语精读第二版(第四册)学习笔记(原文及全文翻译)——16B - Is Everybody Happy?(人人都幸福吗?)
  20. 用 Python 写一个俄罗斯方块游戏

热门文章

  1. 【转】WebAPI ASP.Net 发布部署中常见的两个错误未能找到 CodeDom未能加载System.Web.WebPages.Razor
  2. 【转】添加web引用和添加服务引用有什么区别?
  3. Sharepoint学习笔记—Site Definition系列-- 1、创建Site Columns
  4. ASP.NET中共有哪几种类型的控件?其中,HTML控件、HTML服务器控件和WEB服务器控件之间有什么区别
  5. mq集群要建传输队列吗_面试官:消息队列这些我必问!
  6. SuperSet连接Hive失败(客户端报日志拒绝连接)
  7. 数据结构 - 栈(链表实现栈的入栈出栈)
  8. PHP mysql数据迁移,如何自动化PHP/MySQL应用程序的迁移(架构和数据)
  9. 【HDU - 2089 】不要62 (dp)
  10. 大学计算机二级培训蹭课,本人在复旦大学蹭课总结的一点小小的经验