我有一个简单的代码块
int a = 10;
int b = 20;
int c = 30;
boolean result = a++ == 10 || b++ == 20 && c++ < 30;
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(result);
当我运行这个时,控制台是
11
20
30
true
这个结果告诉我,只对a++ == 10进行了评估。
正如我从这个中看到的,运算符&&比||具有更高的优先级,应该首
取这三段C代码:
1) a = b + a++
2) a = b + a; a++
3) a = b + a, a++
每个人都知道示例1是一件非常糟糕的事情,并且很明显地调用了未定义的行为。示例2没有问题。我的问题是关于例子3。在这种表达式中逗号操作符是否像分号一样工作?2和3是等价的还是3和1一样没有定义?
具体来说,我是在考虑像free(foo), foo = bar这样的事情。这基本上和上面的问题相同。我能确保在重新分配foo之前释放它吗?或者这是一个清晰的序列点问题吗?
我知道这两个例子在很大程度上都是毫无意义的,而仅仅使用分号并完成它就更有意义了。我只是好奇的问你。