我收到一条警告,建议用明确的括号来避免模棱两可的'其他'。
如果我放括号,这个代码的等价物是什么?或者这实际上是否为'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;
}
答案 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”考虑到其间的无限量空间,所以所有的书都建议一直放括号。
我认为在您的情况下,自动括号和我从缩进中猜出的逻辑似乎提供了相同的结果。