Есть ли что-то вроде оперативных операторов AND и OR для bools в c ++, в этом направлении?
bool someOk=false;
for(int i=0; i<10; i++){
someOk||=funcReturningBoolOnSuccess(i);
}
(Я знаю, что могу написать someOk=someOk||funcReturningBoolOnSuccess(i)
, но это не так красиво).
Ответ будет коротким: нет, синтаксис 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;
}
}
Намного эффективнее 🙂
Пока возвращение bool
, ты можешь использовать |=
для этой цели (если вы не хотите строго избегать funcReturningBoolOnSuccess(i);
после первого успеха — в этом случае вы должны использовать некоторые if
а также break
или измените условие for
петля).
Если результат не bool
значение, то вам, вероятно, нужно преобразовать его в это, так как |=
действительно побитовая операция. Любой базовый тип в C или C ++ может быть преобразован в bool
простым трюком !!
(«взрыв-взрыв» или «не-не») — это делает true
ничего ненулевого и false
нулевого результата, что мы и хотим.
Я знаю, что это не на месте, но проще в использовании.
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);