Вложенный оператор if или switch case - PullRequest
0 голосов
/ 02 июня 2011

С точки зрения оптимизации времени выполнения кода, существует ли правило большого пальца для того, где использовать оператор "nested if" и когда использовать операторы "switch case"?

Ответы [ 3 ]

4 голосов
/ 02 июня 2011

Я сомневаюсь, что вы когда-нибудь найдете реальное приложение, в котором разницу между вложенным if и корпусом переключателя даже стоит измерить.Доступ к диску, доступ в Интернет и т. Д. Занимают на много порядков больше времени.

Выберите, что легче всего читать и отлаживать.

Также см. В чем разница между IF-ELSE и SWITCH? (возможно дублирование), а также Преимущество оператора переключения if-else .Интересно, что сторонник switch пишет:

В худшем случае компилятор сгенерирует тот же код, что и цепочка if-else, так что вы ничего не потеряете.Если вы сомневаетесь, сначала поместите наиболее распространенные случаи в оператор switch.

В лучшем случае оптимизатор может найти лучший способ генерации кода.Обычные вещи, которые делает компилятор, - это построение бинарного дерева решений (сохраняет сравнения и переходы в среднем случае) или просто создание таблицы переходов (работает без сравнения вообще).

0 голосов
/ 02 июня 2011

Я не верю, что это будет иметь какое-либо значение для структуры решения, которая может быть реализована с использованием любого из этих методов. Весьма вероятно, что ваш компилятор выдаст те же инструкции в исполняемом файле.

0 голосов
/ 02 июня 2011

Если у вас есть более 2-3 сравнений затем "переключатель" еще "если"

попробуйте применить некоторые паттерны, прежде чем переходить, как стратегия ...

...