>
>
>
V3176. The '&=' or '|=' operator is red…


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

The analyzer has detected a code fragment where the right operand of the '&=' or '|=' operator always has the same value.

Example:

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

In 'then' block of the 'if' construct, a compound assignment operation is performed. The 'currentStatus' variable will take a value equal to the result of the 'currentStatus & status' logical operation. Based on the condition, 'status' will always be 'true', which makes it pointless to use the '&=' operator — the value of 'currentStatus' will not change after the assignment.

If the right-hand operand is always 'false', the use of the '&=' operator is also pointless. In such cases, it can be replaced with a regular assignment.

The use of the '|=' operator is also pointless if its right operand always has the same value:

  • if the value is 'false', the values of the operands remain unchanged;
  • if the value is always 'true', then it will be assigned to the left operand regardless of its original value.

The cases described above may indicate both redundant use of '&=' and '|=' operators and an error in the application's logic.

Fixed version of the method described above may look as follows:

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

This diagnostic is classified as: