以下哪两个实施最好,为什么?
bool MyClass::hasCContainerValues(CContainer* container)
{
if(container && container->nrOfValues>0)
{
return true;
}
return false;
}
bool MyClass::hasCContainerValues(CContainer* container)
{
if(container && container->nrOfValues>0)
{
return true;
}
else
{
return false;
}
}
答案 0 :(得分:4)
假设您没有做除了简单测试之外的任何事情,请使用:
bool MyClass::hasCContainerValues(CContainer* container) const
{
return (container && container->nrOfValues>0);
}
但是,如果你要做更多,那么有时候会认为单个退出点更好(各种静态分析规则集抱怨多个退出点,rightly或wrongly):
bool MyClass::hasCContainerValues(CContainer* container) const
{
bool retval = false;
if(container && container->nrOfValues>0)
{
// something else here perhaps
retval = true;
}
return retval;
}
另外,如果您只是测试内容,那么您可以制作方法const
,但这与您的问题无关。
答案 1 :(得分:2)
假设这是一个例子,你不想只做return (container && container->nrOfValues>0)
,它们都是正确的,同样正确。
其余的是个人观点/品味,它将在这里制造一场宗教战争。
我个人更喜欢第一个,但可能会选择取决于两个条款的复杂性,即true
和false
路径中的逻辑。
答案 2 :(得分:1)
这并不重要......如果您使用现代编译器,它将优化和转换您的代码。 您的2个片段可以生成完全相同的代码。
答案 3 :(得分:0)
嗯,较短的代码形式不会损害代码的可读性,因此最好使用较短的形式,即第一个。因为它是可读的,并且它具有较少的代码行。