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

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

0 0 投票数
打分
订阅评论
提醒
guest
13 评论
内联反馈
查看所有评论
丶花落
游客
8 年 前

int i = 1; i = ++i ? i– ? (i++ + 5) : (–i – 5) : i – 1;

丶花落
游客
8 年 前
回复给  罗佳(博主)

这是C++ Primer里面的一个例子,条件操作符完成的一个万恶的任务——隐藏代码。。。。

caiguoqing
游客
9 年 前

哈哈,最讨厌了

peach5460
游客
9 年 前

这种有违天理的代码,实在没有讨论的必要…严重违反序列点的相关定义啊…

大D
游客
大D
9 年 前

语言解析是一方面,另一方面是不同的编译器也会有不同的结果。

大D
游客
大D
9 年 前
回复给  罗佳(博主)

优先级实现的不同。哈哈

anopos
游客
9 年 前

确实,每种语言解析都不同。