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

时间:2014-03-19 07:11:06

标签: c++ visual-studio visual-c++

当我在Visual Studio 2008中编译以下代码段代码时,我收到此警告。

BOOL
CPlan::getStandardPlan() const
{
    return m_standardPlan;
}


bool m_bStandardPlan;

if(plan!=NULL)
{
    // Assign the values to the Cola object
    poCola->m_lPlanId           = plan->getPlanId();
    poCola->m_lPlanElementId        = plan->getPlanElementId();
    poCola->m_lPlanElementBaseId        = plan->getPlanElementBaseId();
    poCola->m_bStandardPlan         = plan->getStandardPlan(); //C4800

    return 1;
}

我提到了以下链接,

http://msdn.microsoft.com/en-us/library/b6801kcy%28v=vs.90%29.aspx

Forcing value to boolean: (bool) makes warning, !! doesnt

Warning C4800: 'int' : forcing value to bool 'true' or 'false' (performance warning)

我不确定如何修复此警告。

2 个答案:

答案 0 :(得分:28)

BOOL是WinAPI中某处int的typedef。 WinAPI是一个C API,所以他们不能使用C ++的bool。如果您无法通过从函数返回bool来摆脱它,例如因为你没有维护这个功能,所以你可以使用一个明确的零检查来消除警告:

poCola->m_bStandardPlan = (plan->getStandardPlan() != 0);

另一个考虑因素是添加一个封装检查的函数:

bool getStandardPlan(CPlan const& plan) {
  return plan->getStandardPlan() != 0;
}

然后

poCola->m_bStandardPlan = getStandardPlan(plan);

答案 1 :(得分:9)

getStandardPlan()会返回BOOL,其实际上是int的typedef(0表示为false,其他所有值为true)。我通常用三元运算符来解决这个问题。

poCola->m_bStandardPlan = plan->getStandardPlan() ? true : false;