内联函数和宏定义的作用是否相同?
内联函数和宏定义的作用是否相同?
怎么可能相同!
举个例子:计算两个对象的最大值
宏定义:#define max(a,b) ((a) > (b) ? (a) : (b))
无论什么时候你写了象这样的宏,你必须记住在写宏体时对每个参数都要加上括号;否则,别人调用你的宏时如果用了表达式就会造成很大的麻烦。但是即使你象这样做了,还会有象下面这样奇怪的事发生:
int a = 5, b = 0;
max(++a, b);// a 的值增加了2次
max(++a, b+10); // a 的值只增加了1次
这种情况下,max内部发生些什么取决于它比较的是什么值!
而用内联就不会:
inline int max(int a, int b) { return a > b ? a : b; }
上面是我看effective C++这本书做的笔记.