意外的任务

时间:2012-09-22 00:14:18

标签: c++

我听说有些程序员使用if(1 == var)代替if(var == 1)来避免意外分配。为什么或在什么情况下会导致无意识的分配?

2 个答案:

答案 0 :(得分:13)

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

if (var = 1)

VS

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进行比较。因此,即使逻辑上==运算符是可交换的,我也不认为是可交换的并且更喜欢'风险'的方式。我没有发现自己经常使这个任务与平等错误一起使问题成为一个问题。如果我犯了错误,编译器会发出警告(我会注意警告并修复代码,以免出现问题)。

答案 1 :(得分:4)

如果您将其输入错误

if (var = 1)

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

if ((var = 1))

让编译器明白你的意图。