Мое понимание слов, "Если функция изменяет то значение, модификации, появляется также в рамках функции вызова и для передачи значением и ссылкой", то, что они ошибка .
Модификации, сделанные в вызванной функции, не в пределах функции вызова при передаче значением.
Или Вы ввели заключенные в кавычки слова с опечаткой, или они были извлечены из любого контекста, сделанного, что, кажется, является неправильным, правильным.
Мог Вы удостоверяться, что правильно заключили свой источник в кавычки и при отсутствии ошибок, там дают больше текста, окружающего тот оператор в исходном материале.
Вы не можете вернуть ссылку на локальную переменную. Внутри функции operator + ()
вы создаете локальную переменную с именем tmp
. Он будет уничтожен, как только функция завершится. Вы не можете вернуть ссылку на эту переменную, потому что она больше не существует, когда вызывающая функция получает возвращаемое значение.
Измените определение функции на:
const Int operator+(const Int&) const;
Она будет строиться без предупреждений и работать нормально.
Вы пытаетесь вернуть ссылку на ячейку памяти, которая будет недействительной. в тот момент, когда вы ее вернете.
Переменная tmp исчезнет, когда она выйдет за пределы области видимости (то есть, когда оператор + завершится).
Поскольку ваш тип возврата - Int &, в «return tmp» возвращается не значение tmp, а ссылка на tmp. Это неверно, поскольку tmp больше не будет существовать после завершения метода !!
Решение: возвращать не как ссылку, а как Int