Анализатор обнаружил фрагмент кода, в котором правый операнд оператора '&=' или '|=' всегда имеет одно и то же значение.
Рассмотрим пример:
void Foo(bool status) { .... bool currentStatus = ....; .... if(status) currentStatus &= status; .... }
В блоке 'then' конструкции 'if' выполняется операция составного присваивания. Переменная 'currentStatus' примет значение, равное результату логической операции 'currentStatus & status'. Исходя из условия, 'status' всегда будет 'true', что делает бессмысленным использование оператора '&=', ведь после выполнения присваивания значение 'currentStatus' не изменится.
Если же правый операнд всегда равен 'false', использование оператора '&=' также является бессмысленным. В таких случаях он может быть заменён на обычное присваивание.
Использование оператора '|=' также не имеет смысла, если его правый операнд всегда имеет одно и то же значение:
Все описанные выше случаи могут свидетельствовать как об избыточном использовании операторов '&=' и '|=', так и о наличии ошибки в логике работы приложения.
Например, корректный вариант вышеописанного метода может выглядеть следующим образом:
void Foo(bool status) { .... bool currentStatus = ....; .... if(status) currentStatus = status; .... }
Данная диагностика классифицируется как: