zoukankan      html  css  js  c++  java
  • 论++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是根据编译器作者的逻辑来进行编译的,纠结于此没啥意义。

  • 相关阅读:
    flask的类视图
    flask的消息提示flash和abort
    css—left和margin-left的区别
    Git(2)—特性
    JS 基础
    css
    搭建vue环境
    Git(1)—基础
    C中 输出格式
    软件测试_对于堆栈的单元测试
  • 原文地址:https://www.cnblogs.com/ranbom/p/12666283.html
Copyright © 2011-2022 走看看