操作c = a +++ b是什么意思?

时间:2011-09-20 12:24:04

标签: c++ c visual-c++

以下代码让我感到困惑

int a=2,b=5,c;
c=a+++b;
printf("%d,%d,%d",a,b,c);

我预计输出为3,5,8,主要是因为a ++表示2 + 1等于3,3 + 5等于8,所以我预计3,5,8。事实证明结果是3,5,7。有人可以解释为什么会这样吗?

9 个答案:

答案 0 :(得分:90)

它被解析为c = a++ + ba++表示后递增,即在取a的值后计算a + b == 2 + 5的增量。

从不写这样的代码。

答案 1 :(得分:39)

Maximal Munch Rule适用于此类表达式,根据该表达式,表达式解析为:

c = a++ + b;

也就是说,a后递增(a++),因此a的当前值(在后递增之前)用于+操作{ {1}}。

答案 2 :(得分:6)

a ++ post 递增,即表达式取值a和然后加1. c = ++ a + b会做你期望的。

答案 3 :(得分:2)

这是糟糕的编程风格的一个例子。

这是非常难以理解的,但它会增加a,因此它将a的当前值与b相加,然后递增a

答案 4 :(得分:1)

在表达式之后评估a ++。

c = ++ a + b;会给你你的想法。

答案 5 :(得分:1)

后增量运算符a ++在表达式中计算a的值之后更改a的tge值。由于a的原始值是2,这就是用于计算c的值;在评估++之后,更改a的值以反映新值。

答案 6 :(得分:1)

a ++ + b ..it给出结果7,并且由于后增量运算符,a的表达式值更新为3之后

答案 7 :(得分:1)

根据Longest Match规则,在编译器的词法分析阶段,它被解析为++ + + b。因此产生了结果。

答案 8 :(得分:0)

这里c = a +++ b;表示c =(a ++)+ b;即发布增量。 在a ++中,将在下一步打印a,b和c时进行更改。 在++ a中,即前缀增加,更改将在同一步骤中发生,并且输出为8。