2 if语句和1个if-else语句有什么区别?这两个'if'和'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";
2 if语句和1个if-else语句有什么区别?这两个'if'和'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";
不同之处在于,在第二种情况下,仅对条件进行检查和计算一次。
在实践中,优化器将可能使他们完全一样。在这些情况下做的最好的事情就是尝试一下 - 查看编译器的汇编输出,并且您将看到它们的区别。
您不可忽视的现代编译器优化取消多余的支票?整洁的...... **编辑**等等,没办法,cout和<<可以用一些欺骗来修改x:es内存,那么编译器怎么知道提前发生了什么? Oyy的! – Gleno
@Gleno,在这种情况下你可能是对的。让我快速检查一下。 –
在这个例子中,它们不会以相同的方式结束,这是肯定的。即使在我的'-Oz'情况下也有两个比较。无论如何,答案的重要部分是“去看看,你可以找到”。 –
最重要的区别(在我看来)是第一种形式很难阅读,而且更容易出错。
第二种形式更像英文:“如果x是10,那么做,否则做”,而第一种形式基本上使两个子句无关。这很容易出错,因为如果你决定需要改变阈值10,那么你需要在两个地方更新它,而不仅仅是一个。
就执行速度而言,如果完全不同,我会感到非常惊讶。第一种形式会有两种评估,但这是最少的问题。这当然不是你应该浪费时间优化的事情。
没有可见的输出差异。但是,它使你的代码更容易,如果你使用的梯子来读取一个
如果(X == 10)//只匹配,如果x为数字10,然后处理器跳转到下一行即
如果( X!= 10)//只匹配如果x不是数10
其中作为 其他如果只检查,如果数字是10或其他任何东西,然后10
在某种程度上都将导致相同,但它只是陈述的问题。
所以
所以它能够更好地使用性能第二个
从维修性的角度来看第一个
所以,else
是要走的路。
在第一个块中if语句将由编译器运行...... 但是int第二个语句只会运行1个语句,因为两个语句都与单个条件链接。无论是否能够真实,否则可真
你可以理解这是考虑到一日一为“和” type
:第二个是“或”型
你是不是指使用if-else的第二种情况? – greatwolf
@Victor,ayee,你是对的。 – Gleno
如果第二种情况是elseif声明怎么办? – ddd