意外的任务

Vin*_*rta 2 c++

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

Jon*_*ler 13

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

if (var = 1)
Run Code Online (Sandbox Code Playgroud)

VS

if (1 = var)
Run Code Online (Sandbox Code Playgroud)

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

问题并不总是那么明显:

if (var = 0)
Run Code Online (Sandbox Code Playgroud)

if当然,从不执行代码.通常,你会有:

if (var = function(arg1, arg2))
Run Code Online (Sandbox Code Playgroud)

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

if ((var = function(arg1, arg2)) != 0)
Run Code Online (Sandbox Code Playgroud)

要么

if (var == function(arg1, arg2))
Run Code Online (Sandbox Code Playgroud)

我不使用'后向前'比较技术.我不喜欢颠倒的条件,因为他们几乎总是对我说"错".我不是将1与我的变量进行比较; 我将我的变量与1进行比较.因此,即使逻辑上==运算符是可交换的,我也不会认为是可交换的并且更喜欢那种"风险较高"的方式.我没有发现自己经常使这个任务与平等错误一起使问题成为一个问题.如果我犯了错误,编译器会警告我(我会注意警告并修复代码,以免出现问题).