多个if语句之间是否存在差异,否则是否存在差异?

时间:2014-03-01 06:20:23

标签: c if-statement

如果我写

int a = 1;
int b = 2;

if (a == b) {

//Do something

} else if (a > b) {

//Do something else

} else if (a < b) {

//Do something else

}

而不是:

if (a == b) {

//Do something

}
if (a > b) {

//Do something else

}
if (a < b) {

//Do something else

}

编译器解释代码或速度的方式有区别吗?我认为没有逻辑上的区别,但肯定有一个if else语句存在的原因。这只是一个单线突破差异。

4 个答案:

答案 0 :(得分:6)

else-if语句中,当满足条件时,将跳过所有其他else-if

而在多个if语句中,它必须经历所有这些语句。

更确切地说,让我们假设a=b

考虑您的第一个代码块:

int a = 1;
int b = 1;
if (a == b) 
{
    //Do something
} 
else if (a > b) 
{
    //Do something else
} 
else if (a < b) 
{
    //Do something else
}

执行时,自a=b起,它将跳过所有其他条件(a>b&amp; a<b)。

  1. 检查a=b

  2. 执行代码块。

  3. 所有其他人都被跳过。

  4. 考虑您的第二个代码块:

    int a = 1;
    int b = 1;
    if (a == b) 
    {
         //Do something
    }
    if (a > b) 
    {
        //Do something else
    }
    if (a < b) 
    {
        //Do something else
    }
    

    即使满足第一个条件,也将对它们进行评估。

    1. 检查a=b

    2. 执行代码块。

    3. 检查a>b

    4. 检查a<b

答案 1 :(得分:6)

在上面的场景中,除了速度之外,它们是相同的。 If / else将比一系列if更快,因为如果满足else条件,则会跳过if语句。另一方面,在一系列if中,每个条件都是单独评估的。

在其他情况下,当然逻辑是不一样的,因此用一系列if替换else / if会破坏程序。例如:

// this:
if(x <= 0) {
    x = 1;
}
else { // only true if x started out > 0
    x = 37;
}

// is different from this:
if(x <= 0) {
    x = 1;
}
if(x > 0) { // always true in this version
    x = 37;
}

答案 2 :(得分:0)

你写的第二种代码。编译器将显示每个真实语句的put,并且不会跳过任何条件。其他命令用于确保两个条件之一匹配。

答案 3 :(得分:-1)

与多个if语句相比,if-else语句的时间复杂度更低。因此,if-else steements是非常有利的