不应该依赖这样的代码工作,因为它依赖于从左到右进行处理的事实。任何不这样做的实现都会导致其失败。应该避免编写在所有平台和编译器上均无法正常工作或依赖于未记录或未明确定义事物的代码。 为什么从左到右时它能够工作:
假设A = 1且B = 3
A = A + B - ( B = A);
A = 1 + 3 - (1) = 3
B的分配发生在i离开()的地方
底线是只有在从左到右处理时,B对A的分配才会晚一些。 当从右到左处理相同的示例时:
A = A + B - ( B = A);
A = 1 + 1 - (1) = 1
现在B的分配首先发生。 再次强调,不应该依赖于读者无法理解正在发生什么以及编译器相关的代码,而在此处情况就是如此。
B=A
的部分中,并没有真正简化任何东西。我认为它会降低代码的可读性。 - D.R.