Внутри тела нестатической функции-члена выражение this
может использоваться для получения указателя на объект, для которого была вызвана функция [expr.prim.this] . Поскольку ваш operator =
не является константной функцией-членом, this
будет указывать на неконстантный объект (что имеет смысл, поскольку мы назначаем новое значение чему-либо). Таким образом, *this
приведет к неконстантному lvalue типа cAssignmentOprOverload
. Однако ссылка на const может быть привязана к неконстантному lvalue [dcl.init.ref] /5.1.1. В общем случае менее константный квалифицированный тип всегда может быть неявно преобразован в более константный. Что имеет смысл: вы должны иметь возможность использовать модифицируемый объект в местах, где немодифицируемого достаточно. Ничто действительно не может пойти не так, рассматривая модифицируемый объект как немодифицируемый. Все, что происходит, это то, что вы теряете информацию о том, что этот объект действительно был изменяем. Напротив, трактовать неизменяемый объект как модифицируемый, проблематично…
Обратите внимание, что этот способ записи перегруженного operator =
не , как это обычно делается . Каноническая форма будет
cAssignmentOprOverload& operator=(const cAssignmentOprOverload& otherList)
, т. Е. Возвращать ссылку на неконстантную…