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

来源:百度知道 编辑:UC知道 时间:2024/07/04 10:01:44

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

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

#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变量 完成宏的功能。
但是却不能使用宏来完成内联的功能。

不是的,首先,内联函数可以重载,其次,内联函数有类型检查

宏只是做字符串替换,所以很危险

http://www.cnitblog.com/guopingleee/archive/2009/02/16/54624.html

宏只是对其定义的内容,在使用之处进行生硬的替换。这样容易引发一些逻辑错误,可以通过加上括号来避免。
而发明内联函数的作用是