Использование побитового & amp; по логическому

Рассмотрим следующий фрагмент кода:

main()
{
bool flag = true;             //line 1
flag &= funcReturningBool();  //line 2
flag &= funcReturningBool2();
flag &= funcReturningBool3();
//....
//....
//....
//so many such cases
}

bool funcReturningBool()
{
bool ret = false;
// my logic which may (not) modify ret
return ret;
}

bool funcReturningBool2()
{
bool ret = false;
// my logic which may (not) modify ret
return ret;
}

bool funcReturningBool3()
{
bool ret = false;
// my logic which may (not) modify ret
return ret;
}

статический анализатор кода Инструмент указывает на следующую проблему (в строке 2):

«Побитовый оператор применяется к типу со знаком. Полученное значение может отличаться от ожидаемого.«

Может кто-то указать, если я делаю что-то не так?
Также назначьте несколько полезных / логичных альтернативных методов для достижения того же!

0

Решение

Вам просто не следует использовать побитовый оператор для логических значений. Видимо компилятор способствует выводу funcReturningBool или переменная flag на целое число со знаком и предупреждает вас о возможных неожиданных эффектах.

Вы должны придерживаться булевых операторов. Имел &&= существовал, вы могли бы написать flag &&= funcReturningBool();, Вместо этого используйте flag = flag && funcReturningBool();

0

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


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