Почему получается успешно возвращать значения из функции по ссылке и по адресу?
Я знаю, что нельзя возвращать ссылки и адреса локальных переменных, потому что эта ссылка или адрес будет указывать на адрес уже уничтожившейся переменной, т.е. - на мусор.
Вопрос: Но почему в таком случае удается возвращать значения таким образом и всё работает как надо?
Пример кода:
#include <iostream>
#include <conio.h>
using namespace std;
int& doubleValue(int a) {
int value = a * 2;
return value;
}
int *doubleVal(int a) {
int value = a * 2;
return &value;
}
int main() {
cout << doubleValue(2) << endl;
int val1 = doubleValue(3);
cout << val1 << endl;
int &r1 = doubleValue(5);
cout << r1 << endl;
cout << *doubleVal(4) << endl;
int *val2 = doubleVal(3);
cout << *val2 << endl;
int &r2 = *doubleVal(7);
_getch();
return 0;
}
Программа верно выводит все значения. Почему?
UPD:
В моей книге был пример с возвратом локального указателя из функции:
struct free_throws {
int made;
int attempts;
double percent;
};
const free_throws & clone(free_throws &ft) {
free_throws *pt;
pt = &ft;
return *pt;
}
Вопрос: можно ли в этом случае вернуть локальную переменную-указатель. если да, то почему?
Ответы (1 шт):
Неопределенное поведение - оно такое неопределенное....
Понимаете, вы можете перебегать дорогу на красный свет светофора. Можете переходить ее с завязанными глазами и заткнутыми ушами. И у вас это будет отлично получаться... до поры до времени.
И то, что после нескольких переходов вы остались живы и здоровы - является ли основанием говорить, что "на красный переходить можно, я проверял!"?