¿Por qué Switch / Case y no If / Else If?

Esta pregunta apunta principalmente a C / C ++, pero creo que otros idiomas también son relevantes.

No puedo entender por qué se sigue utilizando switch / case en lugar de if / else if. Me parece muy similar a usar goto's, y resulta en el mismo tipo de código desordenado, mientras que los mismos resultados podrían lograrse con if / else if de una manera mucho más organizada.

Aún así, veo estos bloques con bastante frecuencia. Un lugar común para encontrarlos es cerca de un bucle de mensajes (WndProc ...), mientras que estos se encuentran entre los lugares donde causan el mayor estrago: las variables se comparten a lo largo de todo el bloque, incluso cuando no son adecuadas (y no pueden ser inicializado en su interior). Se debe poner atención adicional en no dejar caer los descansos, y así sucesivamente ...

Personalmente, evito usarlos, y me pregunto si me estoy perdiendo algo.

¿Son más eficientes que si / else's? ¿Son continuados por la tradición?

Respuestas a la pregunta(15)

Su respuesta a la pregunta