Это работает только для вас по совпадению, и потому что ваш код берет копию значения в ссылке, прежде чем делать что-либо еще.Он не гарантированно работает.
Вы можете увидеть, что он не работает с:
#include <iostream>
using namespace std;
int& lameness()
{
int h=66;
return h;
}
int main()
{
int &c = lameness();
cout << "c is " << c << endl;
return 0;
}
Конечно, мне пришлось игнорировать предупреждения компиляции:
x.cpp: In function ‘int& lameness()’:
x.cpp:5:13: warning: reference to local variable ‘h’ returned [enabled by default]
x.cpp: In function ‘int main()’:
x.cpp:12:28: warning: ‘h’ is used uninitialized in this function [-Wuninitialized]
Выводбыло:
c is 0
Это происходит потому, что к моменту передачи c
в систему ввода-вывода пространство, которое когда-то было h
в lameness()
, уже использовалось для других переменных, поэтому царапины66
, который был сохранен в пространстве.На самом деле, даже ваш оригинальный код выдает 0 на моем компьютере.