﻿# V765\. Compound assignment expression 'X \+\= X \+ N' is suspicious\. Consider inspecting it for a possible error\.

Анализатор нашёл потенциальную ошибку в арифметическом или логическом выражении\. В составном присваивании переменная стоит и слева, и справа от оператора\.

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

```cpp
void Foo(int x, int y, int z)
{
  x += x + y;
  ....
}
```

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

```cpp
void Foo(int x, int y, int z)
{
  x = x + y;
  ....
}
```

Или так:

```cpp
void Foo(int x, int y, int z)
{
  x += z + y;
  ....
}
```

Конечно, подобные выражения используют для того, чтобы хитро умножить число на два\. Тем не менее такой код подозрителен, и его стоит перепроверить\. Такие операции выглядят довольно запутанно и, возможно, стоит написать гораздо более простой и понятный код:

```cpp
void Foo(int x, int y, int z)
{
  x = x * 2 + y;
  ....
}
```

Есть и более подозрительные выражения, работу которых стоит внимательно проверить:

```cpp
void Foo(int x, int y)
{
  x -= x + y;
}
```

Данное выражение можно упростить следующим образом:

* x \-\= x \+ y;
* x \= x \- \(x \+ y\);
* x \= \-y;

Не понятно, является ли такое поведение преднамеренным или же это опечатка\. В любом случае, этот код следует проверить\.