不寻常地使用布尔表达式

时间:2014-01-31 14:06:25

标签: c++ lint

这是我的代码库的一部分 代码:

bool succ = true;
//below is the place where warning is there 
succ &= draw( e0.x, e0.y, e0.z, (e0.x + dir.x), (e0.y + dir.y), (e0.z + dir.z));
//------
//------
bool draw( FLOAT x, FLOAT y, FLOAT z, FLOAT p, FLOAT q, FLOAT r)  
{
    bool ret;
    ret = fun(x,y,z,p,q,r);
    return ret;
}

警告:

Warning 514: Unusual use of a Boolean expression
Info 1786: Implicit conversion to Boolean (assignment) (int to bool)

我不想增加代码行,所以在一行中执行此逻辑...有人可以帮我解决这个问题......

3 个答案:

答案 0 :(得分:4)

你有一个& =,这些基本类型相当于

bool succ = ...;
succ = succ & draw(...);

然而,按位&运算符采用整数值,因此需要将succ转换为int,以便使用按位和&进行比较。当你使用布尔值时,你应该使用

bool succ = ...;
succ = draw(...) && succ;

(正如所指出的那样你必须改变这里的顺序,因为&&&&&&&&&&&;& and amp;& and

请注意,没有&& =运算符。

编辑:实际上,draw(...)的结果也需要转换为int ...

答案 1 :(得分:1)

您可以使用

获得等效行为,而不会在布尔值和整数值之间进行任何可疑的转换
succ = draw(...) && succ;

if (!draw(...)) succ = false;

请注意第一个操作数的顺序:succ && draw(...)会改变行为,以便只有draw为真时才会调用succ

答案 2 :(得分:0)

bool没有等效的紧凑结构,因为没有&& =运算符。 & =运算符强制转换为int和from int。和&&迫使短路评估。

尝试以下方法之一:

int succ; // define succ as integer to allow use of &=, just like in the good old days

OR

succ = draw( e0.x, e0.y, e0.z, (e0.x + dir.x), (e0.y + dir.y), (e0.z + dir.z)) && succ;

OR

succ = draw( e0.x, e0.y, e0.z, (e0.x + dir.x), (e0.y + dir.y), (e0.z + dir.z)) ? succ : false;

OR

if (!draw( e0.x, e0.y, e0.z, (e0.x + dir.x), (e0.y + dir.y), (e0.z + dir.z))) succ = false;