В частности, если у меня есть ряд операторов if
... else if
, и я как-то заранее знаю относительную вероятность того, что каждый оператор будет оценивать до true
, насколько разница в времени выполнения делает это сортировать их в порядке вероятности? Например, должен ли я это предпочесть:
if (highly_likely)
//do something
else if (somewhat_likely)
//do something
else if (unlikely)
//do something
:
if (unlikely)
//do something
else if (somewhat_likely)
//do something
else if (highly_likely)
//do something
Кажется очевидным, что отсортированная версия будет быстрее, однако для удобства чтения или наличия побочных эффектов мы можем заказать их не оптимально. Также трудно сказать, насколько хорошо процессор будет работать с предсказанием ветвления, пока вы фактически не запустите код.
Таким образом, в ходе экспериментов с этим я в конечном итоге ответил на собственный вопрос по конкретному делу, однако хотел бы услышать и другие мнения/идеи.
Важно: этот вопрос предполагает, что операторы if
могут быть произвольно переупорядочены без каких-либо других эффектов на поведение программы. В моем ответе три условных теста являются взаимоисключающими и не вызывают побочных эффектов. Конечно, если заявления должны быть оценены в определенном порядке для достижения определенного желаемого поведения, то вопрос эффективности спорен.