﻿# V3176\. The '&\=' or '\|\=' operator is redundant because the right operand is always true/false\.

Анализатор обнаружил фрагмент кода, в котором правый операнд оператора '&\=' или '\|\=' всегда имеет одно и то же значение\.

Рассмотрим пример:

```cpp
void Foo(bool status)
{
  ....
  bool currentStatus = ....;
  ....
  if(status)
    currentStatus &= status;
  ....
}
```

В блоке 'then' конструкции 'if' выполняется операция составного присваивания\. Переменная 'currentStatus' примет значение, равное результату логической операции 'currentStatus & status'\. Исходя из условия, 'status' всегда будет 'true', что делает бессмысленным использование оператора '&\=', ведь после выполнения присваивания значение 'currentStatus' не изменится\.

Если же правый операнд всегда равен 'false', использование оператора '&\=' также является бессмысленным\. В таких случаях он может быть заменён на обычное присваивание\.

Использование оператора '\|\=' также не имеет смысла, если его правый операнд всегда имеет одно и то же значение:

* если этим значением будет 'false', то значения операндов останутся неизменными;
* если значение всегда равно 'true', то оно и будет присвоено левому операнду независимо от его изначального значения\.

Все описанные выше случаи могут свидетельствовать как об избыточном использовании операторов '&\=' и '\|\=', так и о наличии ошибки в логике работы приложения\.

Например, корректный вариант вышеописанного метода может выглядеть следующим образом: 

```cpp
void Foo(bool status)
{
  ....
  bool currentStatus = ....;
  ....
  if(status)
    currentStatus = status;
  ....
}
```