int i=3;
int a = (++i)+(++i)+(++i);
java=15
c++=16
wintc=18
真奇怪
跟不同的编译顺序有关
看看相关资料吧
说实在,这个问题比较无聊。没有多少实用价值。
就象算术优先级一样,你觉得复杂,多加几个括号不是了。
是啊,.这个问题确实比较无聊,你需要知道的就是写程序的时候不要这么写就行了.
学习Java还是先看看那些API吧,然后转到J2EE上来.上面还有数不尽的问题呢,具体的语法细节是无聊的.JMX,JMS,JDNI,JavaMail,JTS,... ...我疯了.
Depends on compiler
int i=3;
int a = (++i)+(++i)+(++i);
java=15
c++=16
wintc=18
真奇怪
值为16是指:先做前面的那个加,而++的优先级更高,故(++i) + (++i),计算加时,两个i都是5了,相加得10,再算10+(++i);就是10+6 = 16
而值为18就是先做了三个++,i为6,三个6相加得18
java 同 c++这两种语言的关键差别在于:
c++是整个行业规定的一个标准。
java是一个公司的产品。
而这个C++标准限制的东西不多,导致有很多编译器都遵从这个标准但又都个性十足。
编译出来的东西也不太一样。
java要在虚拟机上用,不熟。
这种代码比较无聊,呵呵
java = 4 + 5 + 6
c++ = 5 + 5 + 6
wintc = 6 + 6 + 6
java和c++区别是使用临时变量
wintc和其他两种语言的区别是整行扫描,然后求值,其他两种语言是从左向右逐一求值
真是无聊,都是C++也有编译器不同的结果
这种东西咋个移植法???
编译器的不同,不是语言的问题!
看着头疼,用起来没劲!!
这可能是Java老师想说明Java的可移植性吧。因为如果
早C++里写这种代码是很不明智的,因为标准对它的行为没有定义。
其实如果在所有平台都用g++,可能能避免一些问题。
这种表达式求值,应该是基于一个栈式的原理来做的. 从左向右扫描,算出运算级别最高的子表达式, 然后再入栈.
(++i)+(++i)+(++i);
栈: (
(++
(++i
(++i) (i=4)
i+
i+(++
i+(++i
i+(++i) -> i+i (i=5)
i+i+ ->10+
10+(++
10+(++i
10+(++i) -> 10 + 6
16
java有可能是每次直接求到具体值就直接求值,所以在三次求值是就是4+5+6=15. 请高手指正
我可讨厌这类老师了,还觉得很有意思的问题,却还转在人家设计的编译器怪圈圈里面
请楼主自己把帖子转到“新手乐园”
呵呵
刚刚看到有关的书,,加几个括号就避免了问题的出现
是啊~~
这个问题就是与编译器有关~~~
很多人问过这个问题~~
http://community.csdn.net/Expert/topic/4260/4260761.xml?temp=.6564447
http://community.csdn.net/Expert/topic/4261/4261926.xml?temp=.7508356
真无聊啊.....难道这个问题非要等没了C这门语言才消失吗?
与具体的编译器有关,这种问题估计也就在课堂上能出现。。。。。。。
这是标准中不定义的内容,实际上就是说,这个表达式,按照C++的话,
不能确定它的值,所以这样的表达式实际上是不允许的
zhaoriyue(sam) 说得好!这个需要基础部比较扎实一点。
healer_kx(天降啊那个甘草哦) ( ) 信誉:100 2005-09-08 15:42:00 得分: 0
是啊,.这个问题确实比较无聊,你需要知道的就是写程序的时候不要这么写就行了.
学习Java还是先看看那些API吧,然后转到J2EE上来.上面还有数不尽的问题呢,具体的语法细节是无聊的.JMX,JMS,JDNI,JavaMail,JTS,... ...我疯了.
嘿嘿,连基本语法都不知道去搞那些,除了问题都还不知道在哪里呢,不疯掉才怪!
whoho(在北方流浪) ( ) 信誉:105 2005-09-12 08:47:00 得分: 0
这是标准中不定义的内容,实际上就是说,这个表达式,按照C++的话,
不能确定它的值,所以这样的表达式实际上是不允许的
嗯,如果标准没有定义就不要用这样的东西,说得好!
这个问题就象几何公理中的平行公理一样,一种编译器有一种的解释,不同的解释有不同的结果
顺便问一下谁编程的时候这样用啊??