Referencias (C++)

Una referencia (por ejemplo, un puntero) almacena la dirección de un objeto que se encuentra en otra parte de la memoria. A diferencia de un puntero, una referencia inicializada no puede hacer referencia a otro objeto ni establecerse en null. Hay dos tipos de referencias: referencias lvalue, que hacen referencia a una variable con nombre, y referencias rvalue, que hacen referencia a un objeto temporal. El operador & significa una referencia lvalue, mientras que el operador && significa una referencia rvalue o una referencia universal (lvalue o rvalue) según el contexto.

Las referencias se pueden declarar con la sintaxis siguiente:

[especificadores de clase de almacenamiento] [calificadores cv] especificadores de tipos [modificador de ms] declarador [=expresión];

Se puede usar cualquier declarador válido que especifique una referencia. A menos que la referencia sea una referencia a un tipo de función o matriz, se aplica la siguiente sintaxis simplificada:

[especificadores de clase de almacenamiento] [calificadores cv] especificadores de tipos [& o &&] [calificadores cv] identificador [=expresión];

Las referencias se declaran mediante la siguiente secuencia:

  1. Los especificadores de la declaración:

    • Un especificador de clase de almacenamiento opcional.
    • Calificadores const y volatile opcionales.
    • El especificador de tipo: el nombre de un tipo.
  2. El declarador:

    • Modificador opcional concreto de Microsoft. Para obtener más información, consulte Modificadores específicos de Microsoft.

    • El operador & o el operador &&.

    • Calificadores const y/o volatile opcionales.

    • El identificador.

  3. Un inicializador opcional.

Las formas de declarador más complejas para punteros a matrices y funciones también se aplican a las referencias a matrices y funciones. Para más información, consulte punteros .

Varios declaradores e inicializadores pueden aparecer en una lista separada por comas detrás de un único especificador de declaración. Por ejemplo:

int &i;
int &i, &j;

Las referencias, punteros y objetos se pueden declarar juntos:

int &ref, *ptr, k;

Una referencia contiene la dirección de un objeto, pero se comporta sintácticamente como un objeto.

Observe que, en el siguiente programa, el nombre del objeto s y la referencia al objeto, SRef, se pueden usar de la misma forma:

Ejemplo

// references.cpp
#include <stdio.h>
struct S {
   short i;
};

int main() {
   S  s;   // Declare the object.
   S& SRef = s;   // Declare and initialize the reference.
   s.i = 3;

   printf_s("%d\n", s.i);
   printf_s("%d\n", SRef.i);

   SRef.i = 4;
   printf_s("%d\n", s.i);
   printf_s("%d\n", SRef.i);
}
3
3
4
4

Vea también

Argumentos de función de tipo de referencia
Valores devueltos de función de tipo de referencia
Referencias a punteros