Вопрос

This is a very trivial problem: There are four boolean functions: a(), b(), c() and d(). I want to keep calling them in order until the first one returns true. instead of doing the traditional

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

or

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

I thought about writing the expression as a short-circuited evaluation.

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

But I've never seen this test being done this way in a C/C++ code. Is there any problem with this approach that I'm missing?

Thanks.

Это было полезно?

Решение

The code you have written is valid. d() will only be evaluated if other boolean functions return false.

However the short-circuited evaluation is less readable, and error prone from a maintenance point of view, because a reader might not get understand it trivially.

Другие советы

They are equivalent, but the short-circuited evaluation solution could be less readable, especially if function names are long or accepts parameters.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top