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;
}
- b的值是多少?
- 它的计算方法是什么?
似乎有一个序列点在表达式中并不重要b=++a + ++a;
也就是说,无论是先++a
评估第一个还是先评估第二个++a
,在任何一种情况下a
都会递增两次,然后+
运算符生效,因此最终的方程要么是b = 2 + 3;
b = 5,要么是b = 3 + 2
b = 5。
当我回到家时,我会用我的 C 编译器试试这个。
Blastfurnace 关于在+
运营商生效之前进行评估的评论是正确的,现在我考虑一下,很明显。
也就是说,+
优先级低于++a
。可以争辩说,这个陈述并不是模棱两可的,因为将评估顺序(R 到 L 或 L 到 R,两者都与优先级有关)会导致相同的答案。
没有人会声称这是编写良好的代码,在讨论的几个要点上很有趣,但不应该被认可。