Почему префикс инкремент перегрузки возвращает тип & amp; вместо типа?

Просто начал делать перегрузки операторов, и мой учитель не слишком углубился в них, поэтому мне было интересно, почему тип возврата отличается для приращения / уменьшения префикса / постфикса. Когда я вижу префикс перегрузки, возвращаемый тип записывается как тип&, но тип возвращаемого значения для постфикса записывается как Тип. Я сделал префикс без & и функции обе работали правильно. Влияет ли возвращаемый тип на что-либо или это просто еще один способ отличить префикс от постфикса?

0

Решение

Причина в том, чтобы разрешить цепочку:

++ ++ ++ i;

Позволять i в три раза, ++ должен вернуть ссылку и взять ссылку. Если он возвращает временную копию, вторая ++ будет увеличивать … временную копию (на самом деле, временная копия не будет связывать &так что его даже не скомпилируют).

2

Другие решения

Чтобы добавить к ответу Эмилио постфиксный инкремент, создайте временную переменную и задайте для нее значение 1 плюс переменную, которую вы хотите увеличить, причем при увеличении префикса фактическая переменная увеличивается, что может в некоторых случаях повысить производительность.

1

Основная причина заключается в том, чтобы следовать семантике для встроенных типов в C ++, где префикс приращения / убывания возвращает lvalue, а постфикс один возвращает rvalue. Подробности можно найти Вот

0
По вопросам рекламы [email protected]