Форум программистов, компьютерный форум CyberForum.ru

Оператор switch - C++

Восстановить пароль Регистрация
 
thick_int
Заблокирован
10.02.2012, 02:19     Оператор switch #1
Зависит ли
a) объектный код от порядка меток case и default в данном операторе?
б) если ответ на первый вопрос положителен, то тогда можно ли говорить, что при том или ином порядке меток case и default оператор switch выполняется быстрее ччем при другом?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.02.2012, 02:19     Оператор switch
Посмотрите здесь:

C++ С++.Оператор switch.
Оператор switch C++
Оператор switch C++
C++ Оператор switch
C++ Оператор switch
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Bers
Заблокирован
10.02.2012, 08:56     Оператор switch #2
Белая магия компилятора может превратить свитч в хитрую структуру данных, наподобие map
Где ключ - это значение case, а значение по ключу - указатель на функцию, которая запустит блок case на выполнение.

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

Точная конструкция этой хитрой структуры зависит от компилятора с его оптимизациями.
Одно можно сказать совершенно наверняка:

В целом, конструкции типа:
C++
1
2
3
4
5
int val = 100500;
if (val == 1) { ... }
if (val == 2) { ... }
...
if (val == 100500) { ... }
Компилятору оптимизировать сложнее, чем свитч с аналогичной логикой.
Поэтому, можно считать, что switсh в среднем работает быстрее, за счет того, что потенциально лучше может быть оптимизирован.

Но вообще есть нюансы. Например, если конкретный блок отработавшего case не break`неццо, то сам блок switсh не закончит свою работу, а будит продолжаться поиск уже нового претендента case

Поэтому, независимо от того, во что блок switсh превратит белая магия компилятора, но на уровне самого исходного кода порядок следования case важен. Он определяет логику работы самого блока switсh.
thick_int
Заблокирован
10.02.2012, 10:53  [ТС]     Оператор switch #3
Не совсем, конечно, точно на вопросы, но все равно спасибо.
Очень даже интересные сведения.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
10.02.2012, 11:43     Оператор switch #4
thick_int, иногда полезно заглянуть в FAQи...
Неочевидные ответы на простые вопросы
6 пункт.
Yandex
Объявления
10.02.2012, 11:43     Оператор switch
Ответ Создать тему
Опции темы

Текущее время: 08:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru