Здравствуйте, Sheridan, Вы писали:
S>Есть if и есть switch и они обязаны себя вести по разному
Они и ведут себя по разному. Ифы — набор произвольных условий, свитчи — выбор подходящего значения для одного выражения.
А вот в чью светлую голову пришло решение скрестить оператор выбора с оператором безусловного перехода...
S>switch полезен тем, что можно писать так, что код сможет выполняться не полностью. Например каттотак
S>S>switch(flag)
S>{
S> case doFullWork: { checkLastWork(); clearTemp(); }
S> case doOptimizedWork: { clearCaches(); }
S> case justDoIt: { doWork(); }
S>}
S>

Жуть. Goto в худшем виде.
Вообще, конструкция switch в том виде, в каком она есть в С/C++, фундаментально ущербна. На мой взгляд, это один из крупных фейлов в языкостроении. Хуже, наверное, только нуллабельные указатели.