Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[13.58.39.23] |
|
Сообщ.
#1
,
|
|
|
Только ли для удобства придумали Switch+Case?
Непохоже, чтобы он был быстрее обычного If-Else. Меньше кода? Возможно, но Case требует дополнительного break, который если забыть - компилятор не заметит, и логика работа case нарушится. |
Сообщ.
#2
,
|
|
|
Быстрее if-else оно не будет, потому что оно переводится в те же ассемблерные команды условного перехода (jz/jnz и т.п.).
"case" без "break" может быть замечено компилятором как warning |
Сообщ.
#3
,
|
|
|
Цитата Mr.Delphist @ Если значения меток идут подряд - вменяемый компилятор с включенной оптимизацией вставляет табличный переход. Если часть идет не подряд - сначала вставляются jz/jnz на эти "не подряд", а в конце - табличный переход для оставшихся "подряд". Хороший оптимизатор может то же самое сделать и из кучи if-else, так что выбор остается за программистом - какой из вариантов записи лучше отражает задумку автора в конкретном месте программы. У меня, например, кое-где для лучшей читаемости используется switch с одной-единственной меткой case. потому что оно переводится в те же ассемблерные команды условного перехода (jz/jnz и т.п.). |