if与if / else相关的布尔值

时间:2013-06-04 09:24:29

标签: c++

以下哪两个实施最好,为什么?

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;
    }
}

4 个答案:

答案 0 :(得分:4)

假设您没有做除了简单测试之外的任何事情,请使用:

bool MyClass::hasCContainerValues(CContainer* container) const
{
    return (container && container->nrOfValues>0);
}

但是,如果你要做更多,那么有时候会认为单个退出点更好(各种静态分析规则集抱怨多个退出点,rightlywrongly):

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),它们都是正确的,同样正确。

其余的是个人观点/品味,它将在这里制造一场宗教战争。 我个人更喜欢第一个,但可能会选择取决于两个条款的复杂性,即truefalse路径中的逻辑。

答案 2 :(得分:1)

这并不重要......如果您使用现代编译器,它将优化和转换您的代码。 您的2个片段可以生成完全相同的代码。

答案 3 :(得分:0)

嗯,较短的代码形式不会损害代码的可读性,因此最好使用较短的形式,即第一个。因为它是可读的,并且它具有较少的代码行。