Оператор может быть в порядке без какого-либо возвращаемого значения, однако обычно включение цепочек происходит, как в
c = (a = b);
. Это присвоит b
a
, а затем назначит возвращаемое значение operator=
звоните c
.Поскольку вы не хотите делать ненужную копию, вы возвращаете ссылку на сам объект, также известный как *this
.На самом деле избегание копирования - не единственная причина использования ссылки, но если вы рассмотрите
(d = e) = f;
, тогда это будет работать только так, как ожидалось (сначала присваивая e
d
, а затем присваивая f
в d
), если operator=
возвращает неконстантную (!) ссылку.
Обратите внимание, что operator*
отличается, поскольку предполагается, что он не изменяет объект, для которого вызывается, а скорее возвращаетновый экземпляр (следовательно, нет &
в возвращении operator*
).