C和java中的++问题

刚刚在一个群里有人指出一个问题,他认为以下代码结果为15

(++i)+(++i)+(++i)

然后我用mingw环境编译了一下,结果是16

#include "iostream.h"
int main(){
	int i=3; 
	cout<<(++i)+(++i)+(++i)<<endl;
    return 0;
}


拆分以后发现最后i==6
似乎和预想的4+5+6没什么出入,那关键就是前面两个了。
后来我仔细想了想,发现mingw编译器编译的时候把两个i先++了再执行第一个相加操作,也就是5+5+6,过程如下

(++i)  //i=4
(++i)  //i=5
5+5  //5+5=10
(++i)  //i=6
10+(++i)  //10+6=16

java是这么理解的

(++i) //i=4
4+(++i) //4+5=9
9+(++i) //9+6=15

然后又有一个小伙伴来了个VS编译的实例,代码一样,不过结果是18

(++i) //i=4
(++i) //i=5
(++i) //i=6
(++i)+(++i)+(++i) //6+6+6=18

所以我劝各位小伙伴们没事不要写这么2B的代码或者拿这种代码去考别人,会挨骂的இ௰இ



本文发布于 https://luojia.me

本站文章未经文下加注授权不得拷贝发布。

本博客使用Disqus评论系统,如果看不到评论框,请尝试爬墙。