Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
If statement 什么';这两种方法的区别是什么;如果';和';否则';声明?_If Statement - Fatal编程技术网

If statement 什么';这两种方法的区别是什么;如果';和';否则';声明?

If statement 什么';这两种方法的区别是什么;如果';和';否则';声明?,if-statement,If Statement,2个if语句和1个if-else语句之间的区别是什么 int x; cin >> x; if (x==10) cout << "Hello"; if (x!=10) cout << "Hey"; intx; cin>>x; 如果(x==10) cout x; 如果(x==10) cout实际上,优化器可能会使它们完全相同。在这些情况下,最好的做法是尝试使用它-查看编译器的汇编输出,您将确切地看到区别所在。区别在于,在第二种情况下

2个if语句和1个if-else语句之间的区别是什么

 int x;

 cin >> x;

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

 if (x!=10) 
   cout << "Hey";
intx;
cin>>x;
如果(x==10)
cout x;
如果(x==10)

cout实际上,优化器可能会使它们完全相同。在这些情况下,最好的做法是尝试使用它-查看编译器的汇编输出,您将确切地看到区别所在。

区别在于,在第二种情况下,条件只被检查和计算一次。

在第一个示例中,这两种情况都被计算,始终如此


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

最重要的区别(在我看来)是第一个表单更难阅读,更容易出错

第二种形式读起来更像英语:“如果x是10,那么做这个,否则做那个”,而第一种形式基本上使这两个从句不相关。这很容易出错,因为如果您决定阈值10需要更改,那么您需要在两个位置而不是一个位置进行更新


在执行速度方面,如果有任何差异,我会非常惊讶。第一种形式将有两个评估,但这是问题中最小的。这当然不是你应该浪费时间优化的事情。

没有明显的输出差异。但是,如果使用梯形图1,则代码更容易阅读。如果(x==10)//仅当x是数字10时匹配,则处理器跳转到下一行,即

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

何处为 其他如果仅选中,如果数字为10或其他任何数字,则为10

在某种程度上,两者的结果是一样的,但这只是陈述的问题

所以

  • 在第一个示例中,将执行if的两行
  • 在第二个示例中,执行其中一个

因此,从可维护性的角度来看,最好使用第二个来提高性能

  • 这违反了原则
  • 更难理解和修改。不是像这里这样一个简单的条件,而是一个很长的条件,你要么直接剪切粘贴条件,然后打一个耳光!在前面,或者试着记住我们是如何形成的。。。总有一天它会失败,而倒转的if将不会与第一个完全相反

因此,
else
是一种方法。

在第一个块中,编译器将运行两个if语句。。。 但是int第二个only 1语句将运行,因为这两个语句都与单个条件链接。如果可能是真的,否则可能是真的

你可以理解为第一个是“和”类型


第二个是“or”类型

你认为现代编译器会优化掉冗余检查吗?干净利落。。。编辑等等,不行,库特和@Gleno,在这种情况下,你可能是对的。让我快速检查一下。在这个例子中,结果肯定不一样。即使在我的
-Oz
案例中,也有两个比较。无论如何,答案的重要部分是“去看看,你会发现的”。Ye,no-O3这是作弊。你不是说第二个案例使用if-else吗?如果第二个案例是elseif语句呢?@ddd,那么它只会在第一个案例返回
false
时进行评估。所以它也更有效,我同意你的看法。我不知道C++如何能在所有混淆问题的基础上优化这个…
int x;

cin >> x;

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

 else 
   cout << "Hey";