Pointers are more powerful than references in the sense that they allow two things that references don’t: nullability and rebinding.


  • References cannot be null and cannot rebind
  • std::reference_wrapper cannot be null but can rebind
  • Pointers can be null and can rebind (and can do low-level address manipulations)
  • boost optional references can be null and can rebind (but are incompatible with std::optional)