Рассмотрим следующий фрагмент кода:
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):
«Побитовый оператор применяется к типу со знаком. Полученное значение может отличаться от ожидаемого.«
Может кто-то указать, если я делаю что-то не так?
Также назначьте несколько полезных / логичных альтернативных методов для достижения того же!
Вам просто не следует использовать побитовый оператор для логических значений. Видимо компилятор способствует выводу funcReturningBool
или переменная flag
на целое число со знаком и предупреждает вас о возможных неожиданных эффектах.
Вы должны придерживаться булевых операторов. Имел &&=
существовал, вы могли бы написать flag &&= funcReturningBool();
, Вместо этого используйте flag = flag && funcReturningBool();