ri = j; // >>> Is this not reassigning the reference? <<<
No, ri
is still a reference to i
– you can prove this by printing &ri
and &i
and seeing they’re the same address.
What you did is modify i
through the reference ri
. Print i
after, and you’ll see this.
Also, for comparison, if you create a const int &cri = i;
it won’t let you assign to that.