• 论++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自带的反汇编查看。

    __i.png

    右边底下红色的不小心位置不小心往下了一行233。

    VS2019 community的逻辑是把 +运算符外的每一个++y都先算好,最后再加和起来。

    而dev cpp是从最右边的+运算符开始。把最右边的左右两边的++y算好。然后加和起来。再算左边+运算符的左右两边的数。

    结语

    感觉这个没啥意义啊。不过对于一些非要打破砂锅问到底的人,看汇编毫无疑问是一个很好的方法。至少能让对方心服口服。

    一些ub是根据编译器作者的逻辑来进行编译的,纠结于此没啥意义。

  • 相关阅读:
    [CF1336C] Kaavi and Magic Spell
    [CF1338C] Perfect Triples
    [CF1353F] Decreasing Heights
    [CF1442B] Identify the Operations
    [CF1354E] Graph Coloring
    [CF1364D] Ehab's Last Corollary
    php-fpm和fastcgi的区别
    phpredis实现互斥锁
    关于lnmp情况下PHP单线程的理解
    客户端断开链接以后 PHP执行过程实测
  • 原文地址:https://www.cnblogs.com/ranbom/p/12666283.html
Copyright © 2020-2023  润新知