Chinaunix首页 | 论坛 | 博客
  • 博客访问: 480032
  • 博文数量: 144
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1190
  • 用 户 组: 普通用户
  • 注册时间: 2013-10-08 20:16
文章分类

全部博文(144)

文章存档

2017年(1)

2015年(5)

2014年(108)

2013年(30)

我的朋友

分类: C/C++

2014-04-12 10:52:58


内联函数和普通函数相比可以加快程序运行的速度,因为不需要中断调用,在编译的时候内联函数可以直接呗镶嵌到目标代码中。
内联函数要做参数类型检查,这是内联函数跟宏相比的优势。
inline是指嵌入代码,就是在调用函数的地方不是跳转,而是把代码直接写到那里去。对于短小的代码来说,inline可以带来一定的效率提升,
而且和C时代的宏函数相比,inline更安全可靠。可是这个是以增加空间消耗为代价的。至于是否需要inline函数就需要根据你的实际情况取舍了。

  inline一般只用于如下情况:

  (1)一个函数不断被重复调用。

  (2)函数只有简单的几行,且函数不包含for、while、switch语句。

  ●一般来说,我们写小程序没有必要定义成inline,但是如果要完成一个工程项目,当一个简单函数被调用多次时,则应该考虑用inline。

  ● 宏在C语言里极其重要,而在C++里用得就少多了。关于宏的第一规则是:绝不应该去使用它,除非你不得不这样做。几乎每个宏

   都表明了程序设计语言里或者程序里或者程序员的一个缺陷,因为它将在编译器看到程序的正文之前重新摆布这些正文。宏也许

   是许多程序设计工具的麻烦。所以,如果你使用了宏,你就应该准备着只能从各种工具(如排错系统、交叉引用系统、轮廓程序等)

     中得到较少的服务。(--pass:宏还是很方便的,使用时要小心,并不是说宏一无是处,存在自然有其合理性)

  宏是在代码处不加任何验证的简单替代,而内联函数是将代码直接插入调用处,而减少了普通函数调用时的资源消耗。

  宏不是函数,只是在编译前(编译预处理阶段)将程序中有关字符串替换成宏体。

  inline函数是函数,但在编译中不单独产生代码,而是将有关代码嵌入到调用处。


inline函数是C++引入的机制,目的是解决使用宏定义的一些缺点。
1.为什么要引入内联函数(内联函数的作用)
  用它替代宏定义,消除宏定义的缺点。宏定义使用预处理器实现,做一些简单的字符替换因此不能进行参数有效性的检测。另外它的返回值不能被强制转换为可转换的合适类型,且C++中引入了类及类的访问控制,在涉及到类的保护成员和私有成员就不能用宏定义来操作。
2.inline相比宏定义有哪些优越处
  (1)inline函数代码是被放到符号表中,使用时像宏一样展开,没有调用的开销效率很高;
  (2)inline函数是真正的函数,所以要进行一系列的数据类型检查;
  (3)inline函数作为类的成员函数,可以使用类的保护成员及私有成员;
3.inline函数使用的场合
  (1)使用宏定义的地方都可以使用inline函数;
  (2)作为类成员接口函数来读写类的私有成员或者保护成员;
4.为什么不能把所有的函数写成inline函数
  内联函数以代码复杂为代价,它以省去函数调用的开销来提高执行效率。所以一方面如果内联函数体内代码执行时间相比函数调用开销较大没有太大的意义;另一方面每一处内联函数的调用都要复制代码,消耗更多的内存空间,因此以下情况不宜使用内联函数。
  (1)函数体内的代码比较长,将导致内存消耗代价;
  (2)函数体内有循环,函数执行时间要比函数调用开销大;
  另外类的构造与析构函数不要写成内联函数。
5.内联函数与宏定义区别
  (1)内联函数在编译时展开,宏在预编译时展开;
  (2)内联函数直接嵌入到目标代码中,宏是简单的做文本替换;
  (3)内联函数有类型检测、语法判断等功能,而宏没有;
  (4)inline函数是函数,宏不是;
  (5)宏定义时要注意书写(参数要括起来)否则容易出现歧义,内联函数不会产生歧义;
阅读(1920) | 评论(0) | 转发(0) |
0

上一篇:static的作用

下一篇:软中断与硬中断

给主人留下些什么吧!~~