Просто начал делать перегрузки операторов, и мой учитель не слишком углубился в них, поэтому мне было интересно, почему тип возврата отличается для приращения / уменьшения префикса / постфикса. Когда я вижу префикс перегрузки, возвращаемый тип записывается как тип&, но тип возвращаемого значения для постфикса записывается как Тип. Я сделал префикс без & и функции обе работали правильно. Влияет ли возвращаемый тип на что-либо или это просто еще один способ отличить префикс от постфикса?
Причина в том, чтобы разрешить цепочку:
++ ++ ++ i;
Позволять i
в три раза, ++
должен вернуть ссылку и взять ссылку. Если он возвращает временную копию, вторая ++
будет увеличивать … временную копию (на самом деле, временная копия не будет связывать &
так что его даже не скомпилируют).
Чтобы добавить к ответу Эмилио постфиксный инкремент, создайте временную переменную и задайте для нее значение 1 плюс переменную, которую вы хотите увеличить, причем при увеличении префикса фактическая переменная увеличивается, что может в некоторых случаях повысить производительность.
Основная причина заключается в том, чтобы следовать семантике для встроенных типов в C ++, где префикс приращения / убывания возвращает lvalue, а постфикс один возвращает rvalue. Подробности можно найти Вот