логическое — на месте bool И и ИЛИ в c ++?

Есть ли что-то вроде оперативных операторов AND и OR для bools в c ++, в этом направлении?

bool someOk=false;
for(int i=0; i<10; i++){
someOk||=funcReturningBoolOnSuccess(i);
}

(Я знаю, что могу написать someOk=someOk||funcReturningBoolOnSuccess(i), но это не так красиво).

1

Решение

Ответ будет коротким: нет, синтаксис C ++ не допускает такой структуры.

Вы должны использовать:

something = something || something_else;

Однако …. если ваша функция возвращает bool в случае успеха (например, true в случае успеха) … Почему бы вам просто не использовать следующее?

someOk = funcReturningBoolOnSuccess(i);

Разве он не вернет false при неудаче в любом случае? Кажется нелогичным.

Почему бы тебе просто не сделать:

bool someOk=false;
for(int i=0; i<10; i++){
if (funcReturningBoolOnSuccess(i)) {
someOk = true;
break;
}
}

Намного эффективнее 🙂

3

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

Пока возвращение bool, ты можешь использовать |= для этой цели (если вы не хотите строго избегать funcReturningBoolOnSuccess(i); после первого успеха — в этом случае вы должны использовать некоторые if а также break или измените условие for петля).

Если результат не bool значение, то вам, вероятно, нужно преобразовать его в это, так как |= действительно побитовая операция. Любой базовый тип в C или C ++ может быть преобразован в bool простым трюком !! («взрыв-взрыв» или «не-не») — это делает true ничего ненулевого и false нулевого результата, что мы и хотим.

1

Я знаю, что это не на месте, но проще в использовании.

void OR(bool& x,bool y)
{
x = x || y;
}

/* later on */

bool someOk = false;

// someOk = false
// funcRetBoolOnSuc(8) = false
OR(someOk,funcRetBoolOnSuc(8));
// someOk = false

// someOk = false
// funcRetBoolOnSuc(8) = true
OR(someOk,funcRetBoolOnSuc(9));
// someOk = true

Или, поскольку bool принимает только 0,1 в качестве значений, вы можете сделать это:

someOk |= funcRetBoolOnSuc(x);
0
По вопросам рекламы [email protected]