posts - 12,  comments - 21,  trackbacks - 0
int a=21,b=11;
cout
<<(--a+b)<<","<<(--b+a);
为什么运行结果是"30,31"啊???
急急急。。。。。。。。
posted on 2011-06-09 12:40 DoubleW 阅读(1639) 评论(12)  编辑 收藏 引用

FeedBack:
# re: 关于自增自减的小问题
2011-06-09 13:52 | K.V
事实上我用vs2008,输出是30,30
不过据说<<的计算顺序是未定义的,可能是从左向右,可能从右向左,看编译器的实现
不过30,30这个结果,我百思不得其解。  回复  更多评论
  
# re: 关于自增自减的小问题
2011-06-09 13:56 | 陈梓瀚(vczh)
@K.V
不仅<<没定义(事实上vs2010debug+从左到右release+从右到左),而且两个--和两个<<之间的顺序也没有准确定义……

所以一般来说我们认为,如果一个语句里出现了i++,那么这个语句里面唯一能出现i的地方就在这里。文章里面的例子违反了这个不成文的守则。  回复  更多评论
  
# re: 关于自增自减的小问题
2011-06-09 13:57 | lugesot
http://apps.hi.baidu.com/share/detail/33574874
参考下这个,明白运行顺序,左值和右值,你也应该明白了。
我的运行结果也是30,30.
个人觉得深究没有太大意义。  回复  更多评论
  
# re: 关于自增自减的小问题
2011-06-09 14:00 | K.V
@陈梓瀚(vczh)
恩。正常的程序是不应该存在这样的编码习惯的。不研究了。  回复  更多评论
  
# re: 关于自增自减的小问题
2011-06-09 16:24 | DoubleW
我也不想去研究啊 ,考试的时候就是有这样的题目,让人死啊...  回复  更多评论
  
# re: 关于自增自减的小问题
2011-06-09 17:02 | 邱震钰(zblc)
在gcc下,是30,31
在vs08下,是30,30

其实还有更多诡异的事情....

在vs08下 如果随便写一个
int fuck(int t)
{
cout<<t<<endl;
return t;
}
int main()
{
int t=4,k;

(double)fuck(++t)/fuck(++t);
k=(double)fuck(++t)/fuck(++t);
}

有没有加'k=' 会影响到编译器是否同步传入的实参.............
换句话说,如果fuck的返回值不会被用到,则t不同步,否则,同步.......

gcc就没这个问题。

考试之前,你熟悉下你们题库是基于哪一个编译器的哪个版本,然后摸清了它的脾气,针对性的来用规律,就ok.

  回复  更多评论
  
# re: 关于自增自减的小问题
2011-06-09 19:23 | airtrack
标准没有规定先对哪个求值,完全由编译器决定,而对于这种标准未定义的东西,没必要去浪费时间,你只需知道求值顺序不确定就行,在实际编码中就不应该出现这样的代码。
PS:其实你可以BS下出这种题目的人。  回复  更多评论
  
# re: 关于自增自减的小问题
2011-06-09 19:42 | DQW
嗯,也曾经头痛这个问题  回复  更多评论
  
# re: 关于自增自减的小问题
2011-06-09 20:23 | DoubleW
@邱震钰(zblc)
我们用的VC++ 6.0;
算了,不去纠结了,背答案....谢谢!  回复  更多评论
  
# re: 关于自增自减的小问题
2011-06-10 10:46 | Bill Hsu
LZ是 wangwang对吧 :-)  回复  更多评论
  
# re: 关于自增自减的小问题
2011-06-10 17:12 | DoubleW
@Bill Hsu
不愧是强哥阿!!!  回复  更多评论
  
# re: 关于自增自减的小问题
2011-06-11 08:10 | jc_ontheroad
这么简短的两行语句,也是机关重重。  回复  更多评论
  

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2011年6月>
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789

常用链接

留言簿(3)

随笔档案(12)

文章档案(2)

最新随笔

搜索

  •  

积分与排名

  • 积分 - 22853
  • 排名 - 659

最新随笔

最新评论

阅读排行榜

评论排行榜