Есть ли разница в производительности (в C ++) между двумя стилями написания if-else, как показано ниже (логически эквивалентный код) для пути likely1 == likely2 == true
(likely1
и likely2
означают здесь как заполнители длянекоторые более сложные условия)?
// Case (1):
if (likely1) {
Foo();
if (likely2) {
Bar();
} else {
Alarm(2);
}
} else {
Alarm(1);
}
против
// Case (2):
if (!likely1) {
Alarm(1);
return;
}
Foo();
if (!likely2) {
Alarm(2);
return;
}
Bar();
Я был бы очень признателен за информацию о максимально возможном количестве компиляторов и платформ (но с выделенным gcc / x86),
Обратите внимание, что я не заинтересован в удобочитаемости мнений по этим двум стилям, ни в «преждевременной оптимизации» претензий.
РЕДАКТИРОВАТЬ: Другими словами, я хотел бы спросить, считаются ли два стиля в какой-то момент полностью-на 100% эквивалентными / прозрачными для компилятора (например, побитовоэквивалентный AST в какой-то момент в конкретном компиляторе), и если нет, то в чем различия?Для любого (с предпочтением по отношению к «современному» и gcc) компилятора вы знаете.
И, чтобы сделать это более ясным, я тоже не думаю, что это даст мне значительное улучшение производительности, ичто это обычно было бы преждевременной оптимизацией, но я * интересуется и , насколько это может улучшить / ухудшить что-нибудь?