不明白Effective C++中的一个例子

tq010or 2005-09-09 11:06:45
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
才对呀?和我的编译器有关系么?我手头上只有这一个编译器。
...全文
76 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
snowbirdfly 2005-09-09
  • 打赏
  • 举报
回复
是啊 ~
这个与编译器有关啊~~
看看http://community.csdn.net/Expert/topic/4260/4260761.xml?temp=7.003421E-02
好多帖子都是这个问题~~
wanguodu 2005-09-09
  • 打赏
  • 举报
回复
尽信书不如不信书啊!个人觉得这种有歧义的东西是取决于编译器实现的。如果编译器对三元运算符的处理是先扫描在判断的话,那么结果就是书上说的;如果编译器懒得去先扫描,挽起袖子就上的话那结果就是你看到的。

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧