a+++(++a+(++a))问题

「已注销」 2009-05-18 11:20:02
++a+(++a)+(++a))请问该表达式在tc和vc环境下怎样运算的,结果测试不一样
...全文
242 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
arong1234 2009-05-22
  • 打赏
  • 举报
回复
计算机等级考试是证明自己是计算机外行的最好考试
[Quote=引用 15 楼 panhuiy_sw 的回复:]
这是计算机等级考试题,没有办法,我要给学生讲,所以我自己要搞明白
[/Quote]
T技术沙龙 2009-05-22
  • 打赏
  • 举报
回复
正常,这个是编译器造成的
sun451989 2009-05-22
  • 打赏
  • 举报
回复
编译器问题..
int a=3;
int b=(++a)+(++a)+(++a);
结果b=:

java 15
vb 12
C 18
C++(VS2008) 18
C++(VC6.0) 16
c# 15
javascript 15
Flash ActionScript 15
光宇广贞 2009-05-21
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 panhuiy_sw 的回复:]
这是计算机等级考试题,没有办法,我要给学生讲,所以我自己要搞明白
[/Quote]

理解……

但是也请理解一下我们……

请楼主提问前可以在坛里面搜一下是否有类似的问题问过……

在你提问的时候,应该会已经给你列出了类似你要提问的问题……

否则……

比如说不小心问出了你现在的问题……坛友们会群情激愤的……

前面有提问这题的,已经被骂过一次了……
sheng1231sheng 2009-05-21
  • 打赏
  • 举报
回复
除了学校考试出这样类型的题,其他地方谁敢用这样的表达式
thuizh 2009-05-21
  • 打赏
  • 举报
回复
Bjarne Stroustrup's C++ Style and Technique FAQ里面有一段:

What's the value of i++ + i++?
It's undefined. Basically, in C and C++, if you read a variable twice in an expression where you also write it, the result is undefined. Don't do that. Another example is:
v[i] = i++;

Related example:
f(v[i],i++);

Here, the result is undefined because the order of evaluation of function arguments are undefined.
Having the order of evaluation undefined is claimed to yield better performing code. Compilers could warn about such examples, which are typically subtle bugs (or potential subtle bugs). I'm disappointed that after decades, most compilers still don't warn, leaving that job to specialized, separate, and underused tools.
[翻译]
i++ + i++ 的值是多少?
未定义。基本上,无论 C 还是 C++,如果你在同一个表达式中两次读取同一个变量,并且还对该变量进行写操作,那么结果就是未定义的。不要这么干。还有个例子是:

v[i] = i++;

相关的例子:

f(v[i],i++);

在此,因为函数参数的求值顺序是未定义的,所以结果也是未定义的。

之所以不定义求值顺序,是为了让编译器有更大的自由度去生成性能更高的代码。编译器应该为类似这些例子发出警告,因为这些都是典型的微小错误(或者说是潜在的微小错误)。很遗憾,尽管数十年的工夫过去了,大多数编译器仍然不会为此发出警告,而将这项工作交给了专门的、独立的、并且鲜有人用的工具。
lzh9955 2009-05-19
  • 打赏
  • 举报
回复
把电脑搞死!
爪哇鹅 2009-05-19
  • 打赏
  • 举报
回复
这样的题目就是为了考试,纯粹脱离了实际,做项目中没有这么弄得,中国什么时候能摆脱应试教育啊!!!!总出这样的题目有什么用处啊?
Jalien 2009-05-18
  • 打赏
  • 举报
回复
顶![Quote=引用 7 楼 akirya 的回复:]
谁有砖头,替我拍出题的人.
[/Quote]
mengde007 2009-05-18
  • 打赏
  • 举报
回复
LZ又要挨批评了;
maosher 2009-05-18
  • 打赏
  • 举报
回复
不同编译器的结果是不一样的
Sou2012 2009-05-18
  • 打赏
  • 举报
回复
无聊的题目,编译器本来就不同,有必要去记吗?
  • 打赏
  • 举报
回复
谁有砖头,替我拍出题的人.
  • 打赏
  • 举报
回复
非常鄙视出这种题目的人,全都没安好心。
这种写法如果出现在公司的程序中,立马走人的可能性为100%
nk_ysg 2009-05-18
  • 打赏
  • 举报
回复
副作用的表达式,具体实现和编译器有关
hurricane880 2009-05-18
  • 打赏
  • 举报
回复
vc6.0是先算前2个,然后剩下的一个一个算,然后相加。
TC是一个一个算,然后相加。
VS2008是全部算完,然后相加。
PS:这种写法没什么用。
rainbow_free 2009-05-18
  • 打赏
  • 举报
回复
我也来学习!
pengzhixi 2009-05-18
  • 打赏
  • 举报
回复
帮顶吧!!我不知道编译器行为会怎么样!
Paradin 2009-05-18
  • 打赏
  • 举报
回复
up
fairchild811 2009-05-18
  • 打赏
  • 举报
回复
结果不定,由编译器决定。

不建议这样写
加载更多回复(15)

65,211

社区成员

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

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