inline函数和宏定义的区别

 

1. inline函数的引入目的是解决使用宏定义的一些缺点。

2. 宏定义的缺点

1)只做一些简单的字符替换,不能进行参数有效性的检测。

2)另外它的返回值不能被强制转换为可转换的合适类型,

3)C++中引入了类及类的访问控制,在涉及到类的保护成员和私有成员就不能用宏定义来操作。

3. inline的优点

1)没有调用的开销。 因为inline函数代码是被放到符号表中,使用时像宏一样展开;

2)进行数据类型检查。因为inline函数是真正的函数;

3)可以使用类的保护成员及私有成员。因为inline函数可以作为类的成员函数。

4. inline函数使用的场合

 1)使用宏定义的地方都可以使用inline函数;

 2)作为类成员接口函数来读写类的私有成员或者保护成员;

5. 为什么不能把所有的函数写成inline函数

     inline函数以代码复杂为代价,它以省去函数调用的开销来提高执行效率。所以一方面如果内联函数体内代码执行时间相比函数调用开销较大没有太大的意义;另一方面每一处内联函数的调用都要复制代码,消耗更多的内存空间,因此以下情况不宜使用内联函数。

 1)函数体内的代码比较长,将导致内存消耗代价;

2)函数体内有循环,函数执行时间要比函数调用开销大;

 3)另外类的构造与析构函数不要写成内联函数。

6. inline函数与宏定义区别

  1)内联函数在编译时展开,宏在预编译时展开;

  2)内联函数直接嵌入到目标代码中,宏是简单的做文本替换;

  3)内联函数有类型检测、语法判断等功能,而宏没有;

  4)inline函数是函数,宏不是;

  5)宏定义时要注意书写(参数要括起来)否则容易出现歧义,内联函数不会产生歧义;

posted on 2013-06-20 23:11  在路上的探索者  阅读(817)  评论(0)    收藏  举报

导航