开发者

What's the difference between these 2 'if' and 'if-else' statements?

What is the difference between 2 if statements and 1 if-else statement?

 int x;

 cin >> x;

 if (x==10) 
   cout开发者_C百科 << "Hello";

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

int x;

cin >> x;

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

 else 
   cout << "Hey";


In practice, the optimizer will probably make them exactly the same. The best thing to do in these cases is to try it - look at the assembly output of your compiler, and you'll see exactly what the difference is.


The difference is that in the second case the condition is checked and computed only once.


In the first example both are evaluated, always.

In the second example if first is true, it never gets to second.


The most important difference (to my mind) is that the first form is harder to read and is more error-prone.

The second form reads more like English: "If x is 10 then do this, else do that" whereas the first form essentially makes the two clauses unrelated. It's error prone because if you decide that the threshold 10 needs to change then you need to update it in two places rather than just one.

In terms of execution speed, I'd be very surprised if there is any difference at all. There will be two evaluations with the first form but that's the least of the problems. It's certainly not the sort of thing you should waste time optimising.


There is no visible output difference. However, it does make your code easier to read if you use the ladder one


if (x==10) //matches only if x is number 10 , then processor jump to next line i.e.

if (x!=10) // matches only if x is not number 10

where as other if checked only , if the number is either 10 or anything else then 10.

In a way both will result same, but its just matter of statements.

so

  • in first example, both lines of if will be executed
  • in second example either of one is executed

So its better to use second one for performance


From a maintainability point of view the first one

  • violates the DRY principle.
  • is a lot harder to understand and modify. Not with a trivial condition, like here, but with a nice long condition you'll either have to just cut 'n paste the condition and slap a ! in front, or try to remember how De Morgan's laws were formulated... And some day that will fail, and the inverted if will fail to be the exact opposite of the first....

So, else is the way to go.


In the first block both if statement will run by the compiler... But int the second one only 1 statement will run as both are linked with a single condition . Either if can be true or else can be true

You can understand this as considering 1st one as 'and' type

And the 2nd one as 'or' type

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜