Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top
menu mobile close menu
Проверка проектов
Дополнительная информация
toggle menu Оглавление

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

01 Июн 2017

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

Пример:

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;
  }
};