﻿# V790\. It is suspicious that the assignment operator takes an object by a non\-constant reference and returns this object\.

Анализатор обнаружил, что оператор присваивания принимает объект по неконстантной ссылке и именно его возвращает\.

Пример:

```cpp
class C {
  C& operator = (C& other) {
    ....
    return other;
  }
};
```

Если оператор присваивания будет реализован таким способом, то можно получить неожиданные и неприятные эффекты\. Допустим, программист напишет код:

```cpp
(A = B)++;
```

Оставим в стороне тот факт, что такой код вообще лучше не писать\. Предположим, что этот код нужен\. Программист, возможно, ожидает, что код будет работать следующим образом:

```cpp
A = B;
A++;
```

Однако из\-за неправильного оператора присваивания он работает так:

```cpp
A = B;
B++;
```

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

Корректный код:

```cpp
class C {
  C& operator = (const C& other) {
    ....
    return *this;
  }
};
```