C ++和C#中的前缀运算符差异

这个问题在这里已经有了答案:

  • 未定义的行为和序列点4个答案
  • 在C,C ++,Java和C#中增加和增加运算符行为6个答案

  • 它在C ++中是undefined behaviour 。 您正试图在没有sequence points情况下多次修改值(按照C ++ 98/03标准)。

    关于C ++ 11

    运算符操作数的值计算在运算符结果的值计算之前排序。 如果对标量对象的副作用相对于同一标量对象的另一副作用或使用同一标量对象的值进行值计算而言是不确定的,则行为是未定义的。

    例子:

    i = v[i++]; // the behavior is undefined
    i = i++ + 1; // the behavior is undefined
    


    在C ++中, int b = ++a + ++a是未定义的行为,因此您可以预期任何结果。


    C#和C ++是不同的语言,具有不同的语义。

    C#决定首先执行第一个++ a,然后执行另一个++ a,最后再添加这两个表达式,因此结果为5。

    在C ++中,你有未定义的行为。 结果可能是2,3,4,5,6,34,500或其他。 另一个可能的结果是Matthew Watson在冰箱里喝了所有的啤酒。 实际上任何事情都可能发生。

    一般来说,期望来自两种不同语言的相同行为是没有意义的。 每个人都遵循自己的规则。


    注意:请参阅此问题在C,C ++,Java和C#中增加和增加运算符行为以进一步进行跨语言讨论。

    链接地址: http://www.djcxy.com/p/73229.html

    上一篇: Prefix operator difference in C++ and C#

    下一篇: When does postincrement i++ get executed?