0

以下两种实现中哪一种是最好的,为什么?

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

4 回答 4

4

假设您所做的只是简单的测试,请继续:

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

但是,如果您要做更多,那么有时会认为单个退出点更好(各种静态分析规则集抱怨多个退出点,无论对错

bool MyClass::hasCContainerValues(CContainer* container) const
{
    bool retval = false;
    if(container && container->nrOfValues>0) 
    {
        // something else here perhaps
        retval = true;
    }
    return retval;
}

另外,顺便说一句,如果您只是测试内容,那么您可能会制作方法const,但这与您的问题无关。

于 2013-06-04T09:26:23.420 回答
2

假设这是一个示例,并且您不想这样做return (container && container->nrOfValues>0),那么它们都可以并且同样正确。

其余的都是个人意见/品味,它将在这里引发一场宗教战争。我个人更喜欢第一个,但可能会根据两个子句的复杂性进行选择,即逻辑truefalse路径。

于 2013-06-04T09:26:29.777 回答
1

没关系……如果您使用现代编译器,它将优化和转换您的代码。您的 2 个片段可以生成完全相同的代码。

于 2013-06-04T09:27:29.257 回答
0

好吧,较短的代码形式不会损害代码的可读性,因此最好使用较短的形式,即第一种形式。因为 is 是可读的并且 in 有更少的代码行。

于 2013-06-04T09:36:24.430 回答