Замена цепочек ifs короткозамкнутыми операциями

Это очень тривиальная проблема:
Существует четыре логических функции: a (), b (), c () и d (). Я хочу продолжать называть их по порядку, пока не вернется первый true, вместо того, чтобы делать традиционные

if(!a()) {
if(!b()) {
if(!c()) {
d();
}
}
}

или же

if(!a() && !b() && !c()) d();

Я подумал о написании выражения как о закороченной оценке.

(a() || b() || c() || d());

Но я никогда не видел, чтобы этот тест проводился таким образом в коде C / C ++. Есть ли проблема с этим подходом, который я пропускаю?

Благодарю.

5

Решение

Код, который вы написали, действителен. d() будет оцениваться только в случае возврата других булевых функций false,

Однако короткозамкнутая оценка менее читаема и подвержена ошибкам с точки зрения обслуживания, поскольку читатель может не понять ее тривиально.

3

Другие решения

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

2

По вопросам рекламы [email protected]