请考虑以下代码段:
main()
{
bool flag = true; //line 1
flag &= funcReturningBool(); //line 2
flag &= funcReturningBool2();
flag &= funcReturningBool3();
//....
//....
//....
//so many such cases
}
bool funcReturningBool()
{
bool ret = false;
// my logic which may (not) modify ret
return ret;
}
bool funcReturningBool2()
{
bool ret = false;
// my logic which may (not) modify ret
return ret;
}
bool funcReturningBool3()
{
bool ret = false;
// my logic which may (not) modify ret
return ret;
}
静态代码分析器工具指出了以下问题(第2行):
" 按位运算符应用于签名类型。结果值可能与预期不符。"
有人可以指出我做错了什么吗? 还要规定一些有用/逻辑的替代方法来实现同样的目标!
答案 0 :(得分:0)
您不应该对布尔值使用按位运算符。显然,编译器会将funcReturningBool
或变量flag
的输出提升为有符号整数,并警告您可能出现意外影响。
你应该坚持使用布尔运算符。如果&&=
存在,您可以写flag &&= funcReturningBool();
。相反,请使用flag = flag && funcReturningBool();