Advantage of switch over if-else statement
Use switch.
In the worst case the compiler will generate the same code as a if-else chain, so you don't lose anything. If in doubt put the most common cases first into the switch statement.
In the best case the optimizer may find a better way to generate the code. Common things a compiler does is to build a binary decision tree (saves compares and jumps in the average case) or simply build a jump-table (works without compares at all).
Why Switch/Case and not If/Else If?
Summarising my initial post and comments - there are several advantages of switch
statement over if
/else
statement:
Cleaner code. Code with multiple chained
if
/else if ...
looks messy and is difficult to maintain -switch
gives cleaner structure.Performance. For dense
case
values compiler generates jump table, for sparse - binary search or series ofif
/else
, so in worst caseswitch
is as fast asif
/else
, but typically faster. Although some compilers can similarly optimiseif
/else
.Test order doesn't matter. To speed up series of
if
/else
tests one needs to put more likely cases first. Withswitch
/case
programmer doesn't need to think about this.Default can be anywhere. With
if
/else
default case must be at the very end - after lastelse
. Inswitch
-default
can be anywhere, wherever programmer finds it more appropriate.Common code. If you need to execute common code for several cases, you may omit
break
and the execution will "fall through" - something you cannot achieve withif
/else
. (There is a good practice to place a special comment/* FALLTHROUGH */
for such cases - lint recognises it and doesn't complain, without this comment it does complain as it is common error to forgotbreak
).
Thanks to all commenters.
When to use If-else if-else over switch statements and vice versa
As with most things you should pick which to use based on the context and what is conceptually the correct way to go. A switch is really saying "pick one of these based on this variables value" but an if statement is just a series of boolean checks.
As an example, if you were doing:
int value = // some value
if (value == 1) {
doThis();
} else if (value == 2) {
doThat();
} else {
doTheOther();
}
This would be much better represented as a switch as it then makes it immediately obviously that the choice of action is occurring based on the value of "value" and not some arbitrary test.
Also, if you find yourself writing switches and if-elses and using an OO language you should be considering getting rid of them and using polymorphism to achieve the same result if possible.
Finally, regarding switch taking longer to type, I can't remember who said it but I did once read someone ask "is your typing speed really the thing that affects how quickly you code?" (paraphrased)
Is else if faster than switch() case?
For just a few items, the difference is small. If you have many items you should definitely use a switch.
If a switch contains more than five items, it's implemented using a lookup table or a hash list. This means that all items get the same access time, compared to a list of if:s where the last item takes much more time to reach as it has to evaluate every previous condition first.
Case vs If Else If: Which is more efficient?
It seems that the compiler is better in optimizing a switch-statement than an if-statement.
The compiler doesn't know if the order of evaluating the if-statements is important to you, and can't perform any optimizations there. You could be calling methods in the if-statements, influencing variables. With the switch-statement it knows that all clauses can be evaluated at the same time and can put them in whatever order is most efficient.
Here's a small comparison:
http://www.blackwasp.co.uk/SpeedTestIfElseSwitch.aspx
if else vs switch performance in java
Switch
perf is better than if else
as in case of switch there will be one time evaluation . Once it evaluated the switch it knows which case needs to be executed but in case of if else
it has to go through all conditions in case of worst scenario.
The longer the list condition, better will be switch performance but for shorter list (just two conditions), it can be slower also
From Why switch is faster than if
With switch the JVM loads the value to compare and iterates through
the value table to find a match, which is faster in most cases
Is there any reason to use switch statement instead of strings of if and elseif?
They may well compile to the same code. But the intent is not necessarily to provide better compiled code so much as it is to provide better source code.
You can do while
or for
loops with if
and goto
as well but that doesn't make while
and for
useless. Would you rather have:
for (i = 0; i < 10; i++)
doSomethingWith (i);
or:
i = 0;
loop12:
if (! (i < 10))
goto skip12
doSomethingWith (i);
i++;
goto loop12
skip12:
Related Topics
Pure Virtual Destructor in C++
Is There a Difference Between Foo(Void) and Foo() in C++ or C
Cmake Error At Cmakelists.Txt:30 (Project): No Cmake_C_Compiler Could Be Found
What Happens to Global and Static Variables in a Shared Library When It Is Dynamically Linked
How to Erase an Element from Std::Vector≪≫ by Index
When Does a Process Get Sigabrt (Signal 6)
When and Why Do I Need to Use Cin.Ignore() in C++
How to Enable C++17 Compiling in Visual Studio
Std::Vector::Resize() Vs. Std::Vector::Reserve()
Static Variables Initialisation Order
How to Create a Dynamic Array of Integers
How to Make a Fully Statically Linked .Exe With Visual Studio Express 2005
Static Constant String (Class Member)