Я пытаюсь оценить, если есть падение производительности в письменной форме этого выраженияразбивая условное выражение
bool func() {
if (expr1 || expr2 ... || exprN)
return 1;
return 0;
}
в
bool func() {
if (expr1)
return 1;
if (expr2)
return 1;
...
if (exprN)
return 1;
return 0;
}
Причины я пытаюсь сделать последнее просто улучшить читаемость/ремонтопригодность (например, последняя может быть записана с помощью вспомогательного макроса и тем самым упростить добавление/удаление expr
. В этом случае около 50 выражений).
Подобный сценарий пишет
bool func() {
if (expr1 && expr2 && ... && exprN) {
return 1;
}
return 0;
}
в
bool func() {
if (!expr1) {
return 0;
}
if (!expr2) {
return 0;
}
...
if (!exprN) {
return 0;
}
return 1;
}
Есть падение производительности в этом случае, и если так сделать компиляторы оптимизируют попытаться оптимизировать его? Мне было бы интересно узнать, делает ли это gcc
.
(Чтобы дать некоторый контекст выражения сами являются функциями и предположим, что мы хотим, чтобы определить, все или, по крайней мере, один возвращает истину. Функции принимают аргументы различных типов)
Распечатайте список языков ассемблера, сгенерированный компилятором. Между кодом, созданным вашими примерами, не должно быть разницы. –
Вы должны поместить все 'expr1 || expr2' ... и т. д. в другую функцию. –
Больше читать не соответствует лучшей читаемости. И ваши первые два кодовых блока не выглядят эквивалентными. – Deduplicator