警告C4800:' int' :强迫价值飙升' true'或者' false' (业绩警告)

时间:2014-01-04 10:20:41

标签: c++ visual-c++-2010 visual-c++-2008

我的代码中有这个问题:

bool CBase::isNumber()
{
return (id & MID_NUMBER);
}

bool CBase::isVar()
{
return (id & MID_VARIABLE);
}

bool CBase::isSymbol()
{
return (id & MID_SYMBOL);
}

3 个答案:

答案 0 :(得分:52)

仅供参考:演员不会隐藏警告by design

这样的东西
return (id & MID_NUMBER) != 0;

应该清楚地说明“我想检查这个值是否为零”并让编译器满意

答案 1 :(得分:2)

使用!!成语例如

bool CBase::isNumber()
{
    return !!(id & MID_NUMBER);
}

答案 2 :(得分:1)

id和MID_NUMBER的声明在哪里?你确定他们不是windef风格的BOOL而不是(小写)bool吗? BOOL几十年来一直在windef作为一个int类型;他们预先约定适当的C ++ bool,并且很多开发人员仍在使用它们。