int main()
{
int b=0,a=1;//initialize a and b
b=++a + ++a;// calculate assign the value of b
print f("%d",b);
return 0;
}
答案 0 :(得分:2)
这是Undefined Behaviour。缺少sequence point。
有关详细信息,请查看here和output-of-multiple-post-and-pre-increments-in-one-statement。
答案 1 :(得分:0)
在表达式b=++a + ++a;
也就是说,在++a
的任何一种情况下,首先评估第一个++a
还是第二个a
被评估,然后递增两次,然后+
运算符生效,所以最终的等式是b = 2 + 3;
或b = 3 + 2
,因此b = 5。
当我回到家时,我会尝试使用我的C编译器。
Blastfurnace关于在+
运算符生效之前进行评估的评论是正确的,现在我考虑一下,显而易见。
也就是说,+
的优先级低于++a
。可以认为,这种说法并不含糊,因为将评价顺序(R到L或L,R,两者都相对于优先顺序)转换成相同的答案。
没有人会声称这是一个编写良好的代码,对于讨论的几个问题感兴趣,但不是应该认可的东西。