Это допустимо и очень полезно в некоторых случаях.
Рассмотрим следующий код:
switch(poll(fds, 1, 1000000)){
default:
// here goes the normal case : some events occured
break;
case 0:
// here goes the timeout case
break;
case -1:
// some error occurred, you have to check errno
}
Дело в том, что приведенный выше код более читабелен и эффективен, чем каскадный if
.Вы можете поставить default в конце, но это бессмысленно, так как оно сосредоточит ваше внимание на случаях ошибок, а не на нормальных (например, случай default
).
На самом деле, это не очень хороший примерВ опросе вы знаете, сколько событий может произойти максимум.Моя реальная точка зрения состоит в том, что это случаев с определенным набором входных значений, где есть «исключения» и нормальный случай.Если лучше ставить исключения или нормальные случаи впереди, это вопрос выбора.
В области программного обеспечения я думаю о другом очень обычном случае: рекурсии с некоторыми терминальными значениями.Если вы можете выразить это с помощью переключателя, default
будет обычным значением, которое содержит рекурсивный вызов и выделенные элементы (отдельные случаи) значения терминала.Обычно нет необходимости сосредотачиваться на значениях терминала.
Другая причина заключается в том, что порядок дел может изменить поведение скомпилированного кода, и это имеет значение для производительности.Большинство компиляторов генерируют скомпилированный ассемблерный код в том же порядке, в котором он отображается в коммутаторе.Это сильно отличает первый случай от других: все случаи, кроме первого, будут включать скачок, который опустошит конвейеры процессора.Вы можете понять это как предиктор ветвления, по умолчанию запускающий первый появившийся случай в коммутаторе.Если случай гораздо более распространенный, чем у других, у вас есть очень веские основания для его обозначения в качестве первого случая.
Чтение комментариев - это конкретная причина, по которой оригинальный постер задал этот вопрос после прочтения компилятора IntelРеорганизация цикла Branch об оптимизации кода.
Тогда это станет неким арбитражем между читаемостью кода и его производительностью.Возможно, лучше написать комментарий, чтобы объяснить будущему читателю, почему дело появляется первым.