2

我听说一些程序员使用if(1 == var)而不是if(var == 1)避免意外分配。为什么或在什么情况下会导致意外分配?

4

2 回答 2

13

问题是如果您输入错误的语句:

if (var = 1)

对比

if (1 = var)

在第一种情况下,if无条件执行之后的代码(不超过编译器的警告,编译器没有义务为您产生警告 - 但好的代码会这样做;如果您没有使用好的编译器, 得到一个!)。在第二种情况下,您在编译时遇到语法错误,因此必须在代码编译之前修复问题。

问题并不总是那么明显:

if (var = 0)

当然,从不执行 之后的代码if。但通常,您将拥有:

if (var = function(arg1, arg2))

并且不清楚您是打算分配还是比较。您可以通过编写以下代码向编译器和代码阅读器(人类)清楚说明:

if ((var = function(arg1, arg2)) != 0)

或者

if (var == function(arg1, arg2))

我不使用“从后到前”比较技术。我不喜欢倒置的条件,因为它们几乎总是对我读“错误”。我没有将 1 与我的变量进行比较;我将我的变量与 1 进行比较。因此,即使在逻辑上==运算符是可交换的,我也不认为可交换,而是更喜欢那种“风险更大”的方式。我还没有发现自己经常犯分配与相等错误,以至于问题成为问题。如果我确实犯了错误,编译器会警告我(我会注意警告并修复代码,以免出现问题)。

于 2012-09-22T00:19:09.173 回答
4

如果您将其输入错误

if (var = 1)

这会导致意外的(?)分配。体面的编译器会警告这一点,除非您包含一组额外的括号

if ((var = 1))

让编译器清楚你的意图。

于 2012-09-22T00:18:56.107 回答