这个“别的”怎么样?

时间:2015-10-04 02:53:52

标签: c++

我收到一条警告,建议用明确的括号来避免模棱两可的'其他'。

如果我放括号,这个代码的等价物是什么?或者这实际上是否为'else if'?

    void balance(Node * & x)
    {
        if (x == nullptr)
            return;
        if (height(x->left) - height(x->right) > 1)
            if(height(x->left->left) >= height(x->left->right))
                rotateLeft(x);
            else
                doubleRotateLeft(x);
        else                                                      // this one
        if (height(x->right) - height(x->left) > 1)
            if(height(x->right->right) >= height(x->right->left))
                rotateRight(x);
            else
                doubleRotateRight(x);

        x->height = max(height(x->left), height(x->right)) + 1;
    }

4 个答案:

答案 0 :(得分:2)

对小猫的爱,使用括号 - 特别是对于这个烂摊子。是的,现在是else if

答案 1 :(得分:1)

确实“读作'如果',”但是如果你使用括号你(将来)或你的代码的任何其他读者都不需要提出什么代码块的问题是else属于; - )

如果稍后您在return;块之前添加更多代码行,则使用括号将产生更好的结果。如果没有括号,您可能会犯一个完全改变代码逻辑的“无辜”错误。

答案 2 :(得分:1)

它的阅读时间为else if。使用大括号和正确格式的等效代码:

void balance(Node * & x)
{
    if (x == nullptr) {
        return;
    }
    if (height(x->left) - height(x->right) > 1) {
        if(height(x->left->left) >= height(x->left->right)) {
            rotateLeft(x);
        }
        else {
            doubleRotateLeft(x);
        }
    }
    else if (height(x->right) - height(x->left) > 1) {
        if(height(x->right->right) >= height(x->right->left)) {
            rotateRight(x);
        }
        else {
            doubleRotateRight(x);
        }
    }
    x->height = max(height(x->left), height(x->right)) + 1;
}

答案 3 :(得分:0)

void balance(Node * & x)
{
    if (x == nullptr)
    {
        return;
    }
    if (height(x->left) - height(x->right) > 1)
    {
        if(height(x->left->left) >= height(x->left->right))
        {
            rotateLeft(x);
        }
        else
        {
            doubleRotateLeft(x);
        }
    }
    else if (height(x->right) - height(x->left) > 1) // this one
    {
        if(height(x->right->right) >= height(x->right->left))
        {
            rotateRight(x);
        }
        else
        {
            doubleRotateRight(x);
        }
    }

    x->height = max(height(x->left), height(x->right)) + 1;
}

这是编译器认为您正在编写的代码。因为“else if”考虑到其间的无限量空间,所以所有的书都建议一直放括号。

我认为在您的情况下,自动括号和我从缩进中猜出的逻辑似乎提供了相同的结果。