int user=12;
bool permitted;
boolis_allowed(intuserid);
if(permitted=is_allowed(user)) // intended =
{
run_script();
}
首先将函数调用的值赋给if语句,然后再计算值。你可以按照下面的方式改写这个if语句:
permitted=is_allowed(user); //assign
first
If(permitted) // evaluate
{
run_script();
}
尽管这种方法敲打键盘的次数较多一点,但是它更具有可读性而且减少了产生认为错误的风险。
在一些例子中,赋值操作符的使用是无意的。下面的例子实际上是为了检查val是否等于OK而不是给它赋值。
if(val=OK) // actually
meant "val==OK"
{
//..do something
}
尽管在这个例子中编译器会提出警告,但是会忽略了它。最后,这个有效代码使编译器不知道这个程序的意图。
为了避免印刷错误,很多程序员在等式语句中倒转操作数的顺序。比如:
if(OK==val) //
can't mistake == for =
{
//..do something
}
从语义上来说,val==OK和OK==val是等价的。但是,当你把rvalue放在左边的时候就不能用=代替==因为编译器认为这是一个错误。
// mistook == for =
// error caught at compile time
if(OK=val)
使复合型语句形成单独语句的条件语句中建议避免使用赋值语句。当用==语句时你可以倒转操作数的顺序这样rvalue出现在左边,这样可以使编译器发现人为错误。