Sé que las referencias son azúcar sintáctico, por lo que el código es más fácil de leer y escribir :)
¿Pero cuáles son las diferencias?
Resumen de las respuestas y los enlaces que figuran a continuación:
- Un puntero puede ser reasignado cualquier número de veces mientras que una referencia no puede ser reasignada después de la encuadernación.
- Los punteros pueden apuntar a ninguna parte (
NULL
), mientras que la referencia siempre se refiere a un objeto. - No se puede tomar la dirección de una referencia como se hace con los punteros.
- No hay "aritmética de referencia" (pero puedes tomar la dirección de un objeto señalado por una referencia y hacer aritmética de puntero sobre él como en &obj + 5).
Para aclarar un concepto erróneo:
El estándar C++ es muy cuidadoso para evitar dictar cómo un compilador debe referencias de implementación, pero cada compilador de C++ implementa referencias como punteros. Es decir, una declaración como:
int &ri = i;
si no se optimiza por completo , asigna la misma cantidad de almacenamiento como un puntero, y coloca la dirección de i en ese almacén.
Así que el puntero y la referencia ocupan la misma cantidad de memoria
Como regla general,
- Utilizar referencias en los parámetros de función y tipos de retorno para definir interfaces útiles y autodocumentadas.
- Usar punteros para implementar algoritmos y estructuras de datos.
Interesante lectura:
- Mi favorito de todos los tiempos C++ FQA lite
- Referencias vs. Punteros
- Una introducción a las referencias
- Referencias y const