0

考虑以下代码片段:

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

"按位运算符正在应用于有符号类型。结果值可能与预期不同。 "

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

4

1 回答 1

0

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

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

于 2014-04-18T10:30:27.887 回答