inline和宏的优点和缺点

inline内联函数

优点:

1)inline定义的内联函数,函数代码被放入符号表中,在使用时进行替换(像宏一样展开),效率很高。

2)类的内联函数也是函数。编绎器在调用一个内联函数,首先会检查参数问题,保证调用正确,像对待真正函数一样,消除了隐患及局限性。

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

缺点:

内联函数以复制为代价,活动产函数开销

1)如果函数的代码较长,使用内联将消耗过多内存

2)如果函数体内有循环,那么执行函数代码时间比调用开销大。


接下来看看宏都有什么好处:

1. 提高了程序的可读性,同时也方便进行修改;

2. 提高程序的运行效率:使用带参的宏定义既可完成函数调用的功能,又能避免函数的出栈与入栈操作,减少系统开销,提高运行效率;

3.宏是由预处理器处理的,通过字符串操作可以完成很多编译器无法实现的功能。比如##连接符。

但是它也有自己的缺点:

1. 由于是直接嵌入的,所以代码可能相对多一点;

2. 嵌套定义过多可能会影响程序的可读性,而且很容易出错;

3. 对带参的宏而言,由于是直接替换,并不会检查参数是否合法,存在安全隐患。

 补充:     预编译语句仅仅是简单的值代替,缺乏类型的检测机制。这样预处理语句就不能享受C++严格的类型检查的好处,从而可能成为引发一系列错误的隐患。

的确,宏定义给我们带来很多方便之处,但是必须正确使用,否则,可能会出现一些意想不到的问题。

最后,引用《C陷进与缺陷》的一句话,对其进行总结:

宏并不是函数,宏并不是语句,宏并不是类型定义


阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页