C ++与C#运算符优先级

用户名

我在Visual Studio C ++和C#上具有相同的代码,并且尽管每个编译器具有相同的优先级和关联性表,每个编译器具有不同的输出

在C ++上

    int i = 10;  
    int a = i++ + ++i + i--;  
    printf("a=%u\n",a);

    i = 10;
    a = i++ + i;
    printf("a=%u\n",a);

    int x=2,y=3;
    int z=((x++)*(x++))+((++y)*(++y));
    printf("x=%u , y=%u , z=%u \n",x,y,z);

输出是

a=33
a=20
x=4 , y=5 , z=29

在C#上

            int i = 10;
            int a = i++ + ++i + i--;

            Console.WriteLine("a={0}",a);

            i = 10;
            a = i++ + i;

            Console.WriteLine("a={0}", a);

            int x = 2, y = 3;
            int z=((x++)*(x++))+((++y)*(++y));
            Console.WriteLine("x={0} , y={1} , z={2}",x,y,z);

输出是

a=34
a=21
x=4 , y=5 , z=26

在C#中,我发现该操作服从优先级表,即后递增的优先级高于前递增的优先级,因此将值放在后递增,我对此找不到任何逻辑解释。有人可以解释吗?

来自莫斯科的弗拉德

在C ++中,该代码具有未定义的行为,因为后增量运算符的副作用相对于其他操作而言没有完全排序。

在C#中,表达式i之前的DAS(定义分配状态)/ DAs必须等于表达式i-1之后的DAS。

表达式x ++或x的计算顺序如下。

  1. x的值被计算并保存。
  2. 该值用于计算x ++或x--并保存。
  3. 保存的结果成为操作的结果。

所以考虑一下声明

int a = i ++ + ++ i + i--;

第一个表达式是i ++。我被评估。它的值为10。将另存为表达式的值。然后执行操作++。运算的结果为11。因此,i的输出DAS等于11。它是下一个表达式++ i的输入DAS。因为有预递增运算符,所以这里对++ i进行了评估。值是12,i的输出DAS是12.i的求值顺序-与i ++ /相同

10 + 12 + 12 = 34

表达式i的输出DAS为11。

也许不是很清楚,但是C ++和C#之间的区别在于C#使升级表达式的过程更具确定性,并清楚地逃避了未定义的行为。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

谁定义C运算符的优先级和关联性?

来自分类Dev

C ++运算符优先级和return语句

来自分类Dev

C / C ++编译器对运算符优先级/评估的严格程度如何?

来自分类Dev

C ++ std :: cout和<<运算符,优先级

来自分类Dev

C中的指针操作和运算符优先级

来自分类Dev

C中的移位运算符优先级

来自分类Dev

C#预处理程序指令中运算符的优先级是什么?

来自分类Dev

c中运算符的优先级

来自分类Dev

在C中进行类型转换时的运算符优先级

来自分类Dev

比较运算符重载与转换运算符的C ++优先级

来自分类Dev

C中运算符优先级的奇怪结果

来自分类Dev

C ++中的运算符优先级

来自分类Dev

有关C ++中运算符优先级的问题

来自分类Dev

C ++逗号运算符的优先级

来自分类Dev

C中的短路和运算符优先级

来自分类Dev

C ++:Stroustrup示例中的运算符优先级

来自分类Dev

C运算符中的优先级==和(=)

来自分类Dev

C与Python-条件语句中的运算符优先级

来自分类Dev

C ++:简单的运算符优先级问题还是其他?

来自分类Dev

c中运算符的优先级

来自分类Dev

转换函数以确定运算符优先级从C#到C ++

来自分类Dev

C#中的运算符优先级和关联性

来自分类Dev

C ++流和运算符>>优先级

来自分类Dev

输出流中的C ++运算符优先级

来自分类Dev

C解释中的运算符优先级

来自分类Dev

C 中的优先级运算符

来自分类Dev

C++ 后缀运算符优先级与布尔 AND

来自分类Dev

C中的运算符优先级?

来自分类Dev

C中'or'和'and'运算符的优先级