Когда вам нужно использовать & перед объявлением оператора?
Символ & объявляет тип возвращаемого значения функции как ссылку.Более конкретно, ссылка на lvalue.Таким образом, вы используете &, когда хотите вернуть ссылку lvalue, и не используете &, когда хотите вернуть ссылку без ссылки.
Итак, когда вы хотите вернуть ссылку из-за перегрузки оператора?Краткое практическое правило заключается в том, что вы должны возвращать ссылку, если встроенный оператор для не относящихся к классу типов является выражением lvalue, и возвращать не-ссылку, если встроенный оператор является выражением rvalue.Есть исключения из этого.Например, иногда вы не можете вернуть ссылку.Возможно, вам нужно вернуть какой-то объект-обертку, который ведет себя как ссылка;такие оболочки обычно возвращаются по значению.
Операторы присваивания, включая составные операторы присваивания, такие как +=
, обычно возвращают ссылку на *this
.
Оператор Postfix условно возвращает предыдущее значение.Таким образом, он не может вернуть ссылку на *this
, которая содержит текущее значение.Префиксный оператор возвращает текущее значение, поэтому он может возвращать ссылку.Приращение префикса объекта, не относящегося к классу, является выражением lvalue, поэтому возвращение lvalue (т. Е. Ссылки) из перегрузки оператора является хорошим соглашением.