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

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

Пример:

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

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

    (A = B)++;

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

    A = B;
    A++;

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

    A = B;
    B++;

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

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

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