int a = 1;
int b = 2;
int* p = &a;
int& r = *p;
cout << "r = " << r << "\n";
p = &b;
cout << "r = " << r << "\n";

で、1、2と表示して欲しかった。
(実際は両方とも1)

どうしても参照でなければならない理由があるのです。
理由は内緒。