C++ references are intentionally not specified in the standard to be implemented using pointers. A reference is more like a “synonym” to a variable than a pointer to it. This semantics opens some possible optimizations for the compiler when it’s possible to realize that a pointer would be an overkill in some situations.
A few more differences:
- You can’t assign NULL to a reference.
This is a crucial difference and the
main reason you’d prefer one over the
other. - When you take the address of a
pointer, you get the address of the
pointer variable. When you take the
address of a reference, you get the
address of the variable being
referred to. - You can’t reassign a reference. Once it is initialized it points to the same object for its entire life.