这是我的代码库的一部分 代码:
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)
我不想增加代码行,所以在一行中执行此逻辑...有人可以帮我解决这个问题......
答案 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;