论++i + ++i + ++i
论++i + ++i + ++i
今天有个朋友找我,说他朋友问他这段代码为什么输出后面的值
#include<iostream>
int main(){
int y = 4;
int b = ++y + ++y + ++y;
std::cout << b;
return 0;
}
他的截图里面是dev cpp运行下输出了19。
第一眼看过去就直接回了个ub。在上学期学长也说过。
但是可能那位朋友的朋友是个坚持不懈的人,非要个答案的话,也可以从汇编层面给他答案。
我用vs敲了一遍,然后发现输出的是21,而不是19。意料之中,上学期学长也说过这玩意是看编译器的。
然后vs自带的反汇编查看。
右边底下红色的不小心位置不小心往下了一行233。
VS2019 community的逻辑是把 +运算符外的每一个++y都先算好,最后再加和起来。
而dev cpp是从最右边的+运算符开始。把最右边的左右两边的++y算好。然后加和起来。再算左边+运算符的左右两边的数。
结语
感觉这个没啥意义啊。不过对于一些非要打破砂锅问到底的人,看汇编毫无疑问是一个很好的方法。至少能让对方心服口服。
一些ub是根据编译器作者的逻辑来进行编译的,纠结于此没啥意义。