ANDROID家园
DoubleW学习乐园
C++博客
首页
新随笔
联系
聚合
管理
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
阅读(2558)
评论(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
这么简短的两行语句,也是机关重重。
回复
更多评论
刷新评论列表
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
网站导航:
博客园
IT新闻
BlogJava
博问
Chat2DB
管理
<
2011年5月
>
日
一
二
三
四
五
六
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(3)
给我留言
查看公开留言
查看私人留言
随笔档案
(12)
2011年10月 (1)
2011年6月 (6)
2011年5月 (5)
文章档案
(2)
2011年5月 (2)
最新随笔
1. Android平台常见属性集合
2. 打开和关闭WIFI 的代码出现了问题 android
3. 关于自增自减的小问题
4. 实现四舍五入
5. 3D游戏开发学习书(转自billhsu)---留着有时间看看
6. C++中const和C的#define区别
7. 构造函数和析构函数调用问题
8. C++基础学习笔记(5)---面向对象(测试题)
9. C++ 基础学习笔记(4)---循环控制结构(测试题)
10. C++基础学习笔记(3)--指针(测试题)
搜索
积分与排名
积分 - 28652
排名 - 661
最新随笔
1. Android平台常见属性集合
2. 打开和关闭WIFI 的代码出现了问题 android
3. 关于自增自减的小问题
4. 实现四舍五入
5. 3D游戏开发学习书(转自billhsu)---留着有时间看看
6. C++中const和C的#define区别
7. 构造函数和析构函数调用问题
8. C++基础学习笔记(5)---面向对象(测试题)
9. C++ 基础学习笔记(4)---循环控制结构(测试题)
10. C++基础学习笔记(3)--指针(测试题)
最新评论
1. re: 关于自增自减的小问题
这么简短的两行语句,也是机关重重。
--jc_ontheroad
2. re: 关于自增自减的小问题
@Bill Hsu
不愧是强哥阿!!!
--DoubleW
3. re: 关于自增自减的小问题
LZ是 wangwang对吧 :-)
--Bill Hsu
4. re: 关于自增自减的小问题
@邱震钰(zblc)
我们用的VC++ 6.0;
算了,不去纠结了,背答案....谢谢!
--DoubleW
5. re: 关于自增自减的小问题
嗯,也曾经头痛这个问题
--DQW
阅读排行榜
1. 构造函数和析构函数调用问题(3239)
2. C++基础学习笔记(5)---面向对象(测试题)(2681)
3. 实现四舍五入(2565)
4. 关于自增自减的小问题(2558)
5. 打开和关闭WIFI 的代码出现了问题 android (2543)
评论排行榜
1. 关于自增自减的小问题(12)
2. C++中const和C的#define区别(3)
3. 构造函数和析构函数调用问题(2)
4. C++ 基础学习笔记(2)---函数(测试题)(2)
5. 实现四舍五入(2)