这些2' if'之间的区别是什么?和' if-else'声明?

时间:2011-09-03 00:32:39

标签: if-statement

2个if语句和1个if-else语句有什么区别?

 int x;

 cin >> x;

 if (x==10) 
   cout << "Hello";

 if (x!=10) 
   cout << "Hey";

int x;

cin >> x;

 if (x==10) 
   cout << "Hello";

 else 
   cout << "Hey";

8 个答案:

答案 0 :(得分:2)

在实践中,优化器可能会使它们完全相同。在这些情况下,最好的办法是尝试一下 - 查看编译器的汇编输出,你会看到确切的区别。

答案 1 :(得分:1)

不同之处在于,在第二种情况下,条件被检查并仅计算一次。

答案 2 :(得分:0)

在第一个例子中,两者都被评估。

在第二个例子中,如果第一个是真的,它永远不会到第二个。

答案 3 :(得分:0)

最重要的区别(在我看来)是第一种形式更难阅读,更容易出错。

第二种形式更像英语:“如果x是10则执行此操作,否则执行此操作”,而第一种形式实际上使两个子句无关。这很容易出错,因为如果您确定阈值10需要更改,那么您需要在两个地方更新它而不仅仅是一个。

就执行速度而言,如果有任何差异,我会感到非常惊讶。第一种形式将进行两次评估,但这是最少的问题。这当然不是你应该浪费时间优化的事情。

答案 4 :(得分:0)

没有明显的输出差异。但是,如果您使用梯形图

,它确实使您的代码更容易阅读

答案 5 :(得分:0)

如果(x == 10)//仅在x为数字10时匹配,则处理器跳转到下一行,即

if(x!= 10)//仅在x不是数字10时才匹配

在哪里  其他如果只检查,如果数字是10或其他任何东西,那么10。

在某种程度上,两者都会产生相同的结果,但这只是陈述的问题。

所以

  • 在第一个例子中,两行if将被执行
  • 在第二个例子中,
  • 执行一个

因此,最好将第二个用于性能

答案 6 :(得分:0)

从可维护性的角度来看第一个

  • 违反了DRY原则。
  • 理解和修改
  • 要困难得多。不像这里那样具有微不足道的条件,但是如果你有一个很好的长条件,你要么必须切断'n粘贴条件并拍打一个!在前面,或者试着记住De Morgan's laws是如何制定的......有些日子会失败,倒置的如果不能与第一个完全相反......

所以,else是要走的路。

答案 7 :(得分:0)

在第一个块中,if语句将由编译器运行... 但是在第二个中只有一个语句会运行,因为它们都与一个条件相关联。要么可以是真的,要么可以是真的

您可以将此理解为将第一个视为'和'类型

第二个为'或'类型