Предупреждение компилятора C++ - возвращающий локальную переменную

Мое понимание слов, "Если функция изменяет то значение, модификации, появляется также в рамках функции вызова и для передачи значением и ссылкой", то, что они ошибка .

Модификации, сделанные в вызванной функции, не в пределах функции вызова при передаче значением.

Или Вы ввели заключенные в кавычки слова с опечаткой, или они были извлечены из любого контекста, сделанного, что, кажется, является неправильным, правильным.

Мог Вы удостоверяться, что правильно заключили свой источник в кавычки и при отсутствии ошибок, там дают больше текста, окружающего тот оператор в исходном материале.

15
задан trikker 21 August 2009 в 08:36
поделиться

2 ответа

Вы не можете вернуть ссылку на локальную переменную. Внутри функции operator + () вы создаете локальную переменную с именем tmp . Он будет уничтожен, как только функция завершится. Вы не можете вернуть ссылку на эту переменную, потому что она больше не существует, когда вызывающая функция получает возвращаемое значение.

Измените определение функции на:

const Int operator+(const Int&) const;

Она будет строиться без предупреждений и работать нормально.

19
ответ дан 1 December 2019 в 02:46
поделиться

Вы пытаетесь вернуть ссылку на ячейку памяти, которая будет недействительной. в тот момент, когда вы ее вернете.

Переменная tmp исчезнет, ​​когда она выйдет за пределы области видимости (то есть, когда оператор + завершится).

Поскольку ваш тип возврата - Int &, в «return tmp» возвращается не значение tmp, а ссылка на tmp. Это неверно, поскольку tmp больше не будет существовать после завершения метода !!

Решение: возвращать не как ссылку, а как Int

8
ответ дан 1 December 2019 в 02:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: