C++的内联函数是不是可以用宏替代? 如果是,为什么还需要内联函数。

如题所述

内联函数的出现就是为了避免宏参替换引起的问题

相信你知道宏参替换会引起什么问题吧.

#define m(x,y) (((x)>(y))?(x):(y))

执行如下代码
m(x++,y)
如果x>y x会被递增两次
如果x<=y x会被递增一次

很明显这不是我们想要的结果

*宏的声明没有函数的定义灵活
首先宏需要大量的括号来确保正确的结合.
如果你想使用一些小巧的算法,代码中需要诸如循环,变量,等等复杂的语法,
这时候宏就力不从心了
你可以想象一下这个过程。
宏名称为m(x)
你想要算x的阶乘
其中会涉及到循环等等复杂语法。
如此调用:
long a=m(4);
然后一大段循环语句被替换到=后面。程序挂了。

*其次宏名没有进入符号列表,比如上面那个宏
如果出错会提示(((xxx)>(xxx))?(xxx):(xxx))中有错误
但是对于大型程序你很难记住上述代码是哪一个宏产生的
于是你就难以在代码中找到错误。
*再次内联函数拥有自动类型转换的优势.
总之内联是非常有必要的.

你可以使用内联函数和const变量 完成宏的功能。
但是却不能使用宏来完成内联的功能。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-08-26
宏只是对其定义的内容,在使用之处进行生硬的替换。这样容易引发一些逻辑错误,可以通过加上括号来避免。
而发明内联函数的作用是为了在调用该函数时,不用去系统函数列表里去查找,直接在调用之处替换为函数实现,从而提高函数调用时的效率。但内联函数只适合较小的函数。
第2个回答  2009-08-26
不是的,首先,内联函数可以重载,其次,内联函数有类型检查

宏只是做字符串替换,所以很危险
第3个回答  2009-08-26
宏并不能完全替代内联函数
一般建议用内联函数
因为宏只是字符替换 参数是没有类型之分的
相似回答