In retrospect, I wish C++ used the term "alias" instead of "reference" to be very clear that a pointer or similar underlying mechanism, including storage, is not necessary.
"It is unspecified whether or not a reference requires storage."
https://eel.is/c++draft/dcl.ref#4
The issue now (and not really C++'s fault) is that people coming from a language like Java hear "reference" and think it works the same way in C++ as it does in Java. Especially reference parameters.
An illustration, a couple of exercises, and an example comparing references in C++ and Java (and Python).
(This is also when I wish more students were on Mastodon/Fediverse. I don't know how but we need to collectively work on that.)