Насколько я себя помню, я избегал использования провалов оператора switch. На самом деле, я не могу вспомнить, чтобы это когда-либо входило в мое сознание как возможный способ делать что-то, поскольку мне вначале вверлили в голову, что это не более чем ошибка в операторе switch. Однако сегодня я натолкнулся на код, который использует это намеренно, что сразу заставило меня задуматься, что все в сообществе думают о провале инструкции switch.
Является ли это чем-то, что язык программирования должен явно запрещать (как это делает C #, хотя и предоставляет обходной путь), или это особенность любого языка, которая достаточно мощна, чтобы оставить ее в руках программиста?
Изменить: я не был достаточно конкретен в том, что имел в виду под провалом. Я часто использую этот тип:
switch(m_loadAnimSubCt){
case 0:
case 1:
// Do something
break;
case 2:
case 3:
case 4:
// Do something
break;
}
Однако меня беспокоит что-то вроде этого.
switch(m_loadAnimSubCt){
case 0:
case 1:
// Do something, but fall through to the other cases
// after doing it.
case 2:
case 3:
case 4:
// Do something else.
break;
}
Таким образом, всякий раз, когда case равен 0, 1, он будет делать все в инструкции switch. Я видел это по дизайну, и я просто не знаю, согласен ли я с тем, что операторы switch должны использоваться таким образом. Я думаю, что первый пример кода очень полезен и безопасен. Второй вариант кажется опасным.