zoukankan      html  css  js  c++  java
  • C#和C++的一个有意思的差别

    看到一篇有意思的文章:http://blogs.msdn.com/lucabol/archive/2004/08/31/223580.aspx

    “x+=x++”的结果是什么?如果是C++,由于C++标准没有规定运算符“+”的左右两边的子表达式的运算顺序,所以结果是未定义的。而C#标准则明确规定了“+”的两边的运算顺序是从左到右,所以是可以得到“x+=x++”的确切的值的。

    比如x = 3,下面是C#编译器的解释顺序:
    1、首先解释“+=”,将表达式转为“x = x + (x++)”;
    2、先计算“+”左边的值:“x = 3 + (x++)”;
    3、然后是“x++”,得到:“x = 3 + 3”,同时x被赋值为4;
    4、最后“x = 6”,覆盖了上一步赋值结果4。

    由于顺序是可以得到确定的,所以还可以得知:

    “x = (x++) + x”的结果和“x = x + (x++)”的结果是不一致的。

    同样x = 3,“x = (x++) + x”的结果是这样:
    1、首先解释“(x++)”,表达式转为:“x = 3 + x”,同时x这时被赋值为4;
    2、接着解释“+”右边,表达式转为:“x = 3 + 4”;
    3、最后“x = 7”。

    结论:YOU ARE NOT GOING TO WRITE THAT CODE...

  • 相关阅读:
    Java API学习
    Java接口类学习笔记
    TCP/IP协议族
    Web服务器
    Redis笔记
    Python知识总汇
    GIL锁
    day8
    day7
    day6
  • 原文地址:https://www.cnblogs.com/kaneboy/p/2436794.html
Copyright © 2011-2022 走看看