使用按位和&在布尔值上

时间:2014-04-18 10:23:17

标签: c++ boolean bitwise-and

请考虑以下代码段:

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行):

" 按位运算符应用于签名类型。结果值可能与预期不符。"

有人可以指出我做错了什么吗? 还要规定一些有用/逻辑的替代方法来实现同样的目标!

1 个答案:

答案 0 :(得分:0)

您不应该对布尔值使用按位运算符。显然,编译器会将funcReturningBool或变量flag的输出提升为有符号整数,并警告您可能出现意外影响。

你应该坚持使用布尔运算符。如果&&=存在,您可以写flag &&= funcReturningBool();。相反,请使用flag = flag && funcReturningBool();