The actual question is "why use references instead of pointers".
I haven't quite figured that out yet. Currently, I use references
because you can't assign to them. Worst case this doesn't mean anything to the compiler, but there's the chance that the compiler can make use of that knowledge.
often when I want to return a pointer that always exists, or to indicate that a parameter is required and may not be a nullptr (there is no null-reference). It's not a hard rule; sometimes an actual pointer feels more natural.
when things just ask for references, like operator overloads.
In general, I end up using a lot of references, since I don't generally want to copy objects unless I really need an actual copy, and references often work.