【问题标题】:Why use if-else if in C++?为什么在 C++ 中使用 if-else if?
【发布时间】:2009-10-07 01:26:15
【问题描述】:

如果可以再做一个 if 语句,为什么还要使用 if-else 语句?

具有多个 if 的示例:

input = getInputFromUser()
if input is "Hello"
    greet()

if input is "Bye"
    sayGoodbye()

if input is "Hey"
    sayHi()

else-if 示例:

input = getInputFromUser()
if input is "Hello"
    greet()

else if input is "Bye"
    sayGoodbye()

else if input is "Hey"
    sayHi()

【问题讨论】:

  • 我的印象是这里允许提出与编程相关的问题,无论他们处于什么级别。对我们许多人来说,这似乎是一个基本问题,但我不明白为什么它被认为“不是一个真正的问题”。
  • @litb - 关键字更少,但条件更复杂 - 条件必须明确排除 else 会为您排除的内容。假设 else 是合适的,你最终会得到更多的单词、数字和符号。
  • 不仅如此,它是否相同取决于您作为第一个分支的主体执行的内容。您可以更改条件变量...我认为翻转条件中使用的标志很常见,例如
  • 我投票支持重新开放。这是一个有效的问题,并不是那个措辞不好。
  • 这其实是一个很好的问题。对于给定的示例,编译器是否应该能够优化多个 if 并生成与 else-if 一样高效的代码?感谢“非建设性”的近距离投票者,我们可能看不到很多有趣的答案。

标签: c++ if-statement


【解决方案1】:

如果您有非排他性条件:

if(a < 100)
{...}
else if (a < 200)
{...}
else if (a < 300)
....

这与没有“else”的相同代码非常不同......

【讨论】:

    【解决方案2】:

    它的性能也更高。

    在您的第一个示例中,将检查 每个 if,即使输入是“Hello”。所以你有所有三个检查。

    在您的第二个示例中,一旦找到分支,执行就会停止,因此如果用户键入“Hello”,它将只检查一次而不是三次。

    在您的简单示例中差异可能不大,但假设您正在执行一个可能很昂贵的函数,您可能会看到差异。

    【讨论】:

      【解决方案3】:

      你的意思是这样的:

      if (a == true && b == false && c == 1 && d == 0) {
          // run if true
      }
      
      if (a == false || b == true || c != 1 || d != 0) {
          // else
      }
      

      else 语句会更清晰,更易于维护。

      【讨论】:

      • 而且不易出错。您的两个陈述并不完全相反 - 您需要在第二个陈述中将 &amp;&amp; 更改为 ||
      • @Chris Lutz,发现错误并与您差不多在同一时间修复它:-)
      【解决方案4】:

      如果您需要从给定的一组动作中选择恰好一个动作,根据某些条件,自然和最明确的选择是切换(不要忘记在每个分支之后中断)或if 和 else 的组合。当我写作时

      if (conditon1)
      {
          action1();
      }
      else if (condition2) 
      {
          action2();
      }
      else if (conditon3)
      {
          action3();
      }
      .
      .
      .
      else {
          action_n();
      }
      

      读者很清楚要执行其中一项操作。并且不可能因为条件错误而执行一个以上的动作。

      【讨论】:

        【解决方案5】:

        按照您的相同示例,如果我们使用if 条件序列,无论输入是什么,它将运行所有 3 个条件。将 sequence of if 替换为 if-else 条件将在最好的情况下仅运行第一个条件,而在最坏的情况下运行所有​​ 3 个条件。

        因此得出结论,if-else 在大多数情况下会节省我们的运行时间,因此使用if-else 优于使用sequence of if 条件。

        input = getInputFromUser()
        if input is "Hello"
            greet()
        
        if input is "Bye"
            sayGoodbye()
        
        if input is "Hey"
            sayHi()
        

        【讨论】:

          猜你喜欢
          • 2018-09-19
          • 2011-12-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-03-14
          相关资源
          最近更新 更多