内联函数和宏定义的区别

来源:互联网 发布:cpc广告发布网站源码 编辑:程序博客网 时间:2024/06/15 20:24


使用宏和内联函数都可以节省在函数调用方面所带来的时间开销。二者都采用了空间换时间的方式,在其调用处进行展开

(1)  在预编译时期,宏定义在调用处执行字符串的原样替换。

编译时期,内联函数在调用处展开,同时进行参数类型检查(而 宏 不检查)

(2)  内联函数首先是函数,可以像调用普通函数一样调用内联函数。

而宏定义往往需要添加很多括号防止歧义,编写更加复杂。

(3) 内联函数可以作为某个类的成员函数,这样可以使用类的保护成员和私有成员。(在类中声明同时定义的成员函数,自动转化为内联函数。

而当一个表达式涉及到类保护成员或私有成员时,不能实现了(无法将this指针放在合适位置)。

(4) 内联函数在运行时可调试,而宏定义不可以
可以用内联函数完全替代宏。
在编写内联函数时,函数体应该短小而简洁,不应该包含循环等较复杂结构,否则编译器不会将其当作内联函数看待,而是把它决议成为一个静态函数。

有些编译器甚至会优化内联函数,通常为避免一些不必要拷贝和构造,提高工作效率。

频繁的调用内联函数和宏定义容易造成代码膨胀,消耗更大的内存而造成过多的换页操作。

http://blog.csdn.net/ljlstart/article/details/51284906

http://blog.csdn.net/will130/article/details/48712453