Continuamos con la serie de artículos dedicados a darle caña a C++. Hablamos hoy de las referencias y de su significado.
Una definición genérica e intuitiva de referencia podría ser la de una construcción del lenguaje que nos permite acceder a una estructura de datos.
En Java por ejemplo, casi todo lo que entendemos como «declaraciones de variables» son realmente referencias. Sólo son verdaderas variables aquellos identificadores cuyo tipo es primitivo (a saber: boolean, char, byte, short, int, long, float y double).
double g = 9.8; // Aquí g es una variable clásica g.isInfinite(); // No tine sentido, g no es una estructura de datos, es una variable Double r = new Double(9.8); // Aquí r es una referencia a un objeto Double. En Java, por convenio, las clases de objetos comienzan por una letra mayúscula r.isInfinite(); // Esto sí tiene sentido, como referencia, r nos permite acceder al objeto
Referenciar no tiene por qué estar ligado a la programación orientada a objetos. Desreferenciar un puntero a una estructura, en C, puede verse como un acto referencial a la estructura apuntada por el puntero:
struct vector { int x; int y; } v; struct vector *pv = &v; (*pv); // La construcción (*pv) es una referencia a v (*pv).x = 0; pv->y = 1; // La flecha es una forma abreviada de desreferenciar y acceder a un campo. Más azúcar sintáctico.
Hasta aquí parece fácil. Veamos por qué la cosa se complica en C++.