不明白Effective C++中的一个例子
EFFECTIVE C++中的一个例子:
////////////////////////////////////////////////////////////////////
#define max(a,b) ((a) > (b) ? (a) : (b))
这个语句有很多缺陷,光想想都让人头疼,甚至比在高峰时间到高速公路去开车还让人痛苦。
无论什么时候你写了象这样的宏,你必须记住在写宏体时对每个参数都要加上括号;否则,别人调用你的宏时如果用了表达式就会造成很大的麻烦。但是即使你象这样做了,还会有象下面这样奇怪的事发生:
int a = 5, b = 0;
max(++a, b); // a 的值增加了2次
max(++a, b+10); // a 的值只增加了1次
//////////////////////////////////////////////////////////////////////////////
我的程序是:
#define max(x,y)((a)>(b)?(a):(b));
#include<iostream>
int main()
{
int a = 5;
int b = 7;
max(++a,b);
std::cout<<a<<' '<<b<<'\n';
max(++a,b+10);
std::cout<<a<<' '<<b<<'\n';
}
在borland C++ 5.5下编译得到的结果是:
6 7
7 7
不是说a的值增加了两次么?应该是:
7 7
8 7
才对呀?和我的编译器有关系么?我手头上只有这一个编译器。