当前位置:首页
开发技术指南» 文章正文
    引言:

 ·初学,宰相的麦子问题。    »显示摘要«
    摘要: 宰相的麦子:相传古印度宰相达依尔,是国际象棋的发明者。有一次,国王因为他的贡献要奖励他,问他想要什么。达依尔说:“只要在国际象棋棋盘上(共64格)摆上这么些麦子就行了:第一格一粒,第二格两粒,……,后面一格的麦子总是前一格麦子数的两倍,摆满整个棋盘,我就感恩不尽了。”国王一想,这还不容易,刚想答应,如果你这时在国王旁边站着,你会不会劝国王别答应,为什么? 请写出算法,并说出用for和用wh......
 ·报应    »显示摘要«
    摘要: 千分散尽还复来 ......


不明白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    
  才对呀?和我的编译器有关系么?我手头上只有这一个编译器。  
 

NO.1   作者: wanguodu

尽信书不如不信书啊!个人觉得这种有歧义的东西是取决于编译器实现的。如果编译器对三元运算符的处理是先扫描在判断的话,那么结果就是书上说的;如果编译器懒得去先扫描,挽起袖子就上的话那结果就是你看到的。

NO.2   作者: snowbirdfly

是啊   ~  
  这个与编译器有关啊~~  
  看看http://community.csdn.net/Expert/topic/4260/4260761.xml?temp=7.003421E-02  
  好多帖子都是这个问题~~


    摘要: printdocument pd=new system.drawing.printing.printdocument(); pd.defaultpagesettings.papersize=new papersize("mypaper",400,600) pd.printpage+=new printpageeventhandler(pd_printpage); pd.......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE