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