use*_*310 20 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;
}
Run Code Online (Sandbox Code Playgroud)
我提到了以下链接,
http://msdn.microsoft.com/en-us/library/b6801kcy%28v=vs.90%29.aspx
警告C4800:'int':强制值为bool'true'或'false'(性能警告)
我不确定如何修复此警告.
Arn*_*rtz 29
BOOL
是int
WinAPI中某个地方的typedef .WinAPI是一个C API,所以他们不能使用C++ bool
.如果你不能通过bool
从函数返回一个来摆脱它,例如因为你没有维护函数,那么你可以使用显式检查零来消除警告:
poCola->m_bStandardPlan = (plan->getStandardPlan() != 0);
Run Code Online (Sandbox Code Playgroud)
另一个考虑因素是添加一个封装检查的函数:
bool getStandardPlan(CPlan const& plan) {
return plan->getStandardPlan() != 0;
}
Run Code Online (Sandbox Code Playgroud)
然后
poCola->m_bStandardPlan = getStandardPlan(plan);
Run Code Online (Sandbox Code Playgroud)
getStandardPlan()
返回一个BOOL
实际上是一个typedef的int
(0是false
和其他所有值一样true
).我通常用三元运算符解决这个问题.
poCola->m_bStandardPlan = plan->getStandardPlan() ? true : false;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
18200 次 |
最近记录: |