¿Qué es una variable de referencia en C ++?

¿Cuál sería una breve definición de una variable de referencia en C ++?

Una referencia es una entidad que es un alias para otro objeto .

Una referencia no es una variable, ya que una variable solo se introduce mediante la statement de un objeto . Un objeto es una región de almacenamiento y, en C ++, las referencias no ocupan (necesariamente) ningún almacenamiento.

Como los objetos y las referencias son grupos distintos de entidades en C ++, el término “variable de referencia” no es significativo.

Una variable de referencia proporciona un alias (nombre alternativo) para una variable previamente definida. Por ejemplo:

 float total=100; float &sum = total; 

Significa que tanto el total como la sum son las mismas variables.

 cout< < total; cout << sum; 

Ambos van a dar el mismo valor, 100 . Aquí el operador & no es el operador de dirección; float & significa una referencia a flotar.

Una variable de referencia es un alias (un nombre alternativo) para un objeto . [De las preguntas frecuentes de C ++].

El primer párrafo del artículo de Wikipedia podría servir fácilmente como una breve definición:

En el lenguaje de progtwigción C ++, una referencia es un tipo de datos de referencia simple que es menos poderoso pero más seguro que el tipo de puntero heredado de C.

Y citando del mismo artículo:

Las referencias de C ++ difieren de los punteros en varias formas esenciales:

  • No es posible hacer referencia directamente a un objeto de referencia después de que se haya definido; cualquier aparición de su nombre se refiere directamente al objeto al que hace referencia.

  • Una vez que se crea una referencia, no se puede hacer más tarde para hacer referencia a otro objeto; no puede ser resecado Esto se hace a menudo con punteros.

  • Las referencias no pueden ser nulas, mientras que los punteros pueden; cada referencia se refiere a algún objeto, aunque puede o no ser válido.

  • Las referencias no pueden ser sin inicializar. Debido a que es imposible reinicializar una referencia, deben inicializarse tan pronto como se creen. En particular, las variables locales y globales deben inicializarse donde están definidas, y las referencias que son miembros de datos de instancias de clase deben inicializarse en la lista de inicializadores del constructor de la clase.

Otras lecturas:

  • Wikipedia: Referencia C ++
  • Cprogramming.com: referencias de C ++
  • Desbordamiento de stack: diferencia entre la variable de puntero y la variable de referencia en C ++

Es una variable que hace referencia a otra:

 int foo; int& bar = foo; 

bar es ahora una referencia, lo que quiere decir que bar guarda la ubicación de la memoria donde se encuentra foo .

Mira aquí para más información.

Las referencias de C ++ le permiten crear un segundo nombre para la variable que puede usar para leer o modificar los datos originales almacenados en esa variable

Para más detalles, visite:

http://www.cprogramming.com/tutorial/references.html

http://www.tutorialspoint.com/cplusplus/cpp_references.htm

Una variable de referencia es un alias para el nombre de la variable .

Es diferente de los indicadores de las siguientes maneras:

  1. No puedes tener referencias NULL. Siempre debe ser capaz de asumir que una referencia está conectada a una pieza legítima de almacenamiento.
  2. Una vez que se inicializa una referencia a un objeto, no se puede cambiar para apuntar a ningún otro objeto, mientras que en el caso del puntero podemos hacer que apunte a cualquier otro objeto en cualquier momento.
  3. Una referencia debe inicializarse al momento de su creación. Los punteros se pueden inicializar en cualquier momento.

Las variables de referencia permiten que dos nombres de variable aborden la misma ubicación de memoria:

 int main() { int var1; // var2 is a reference variable, holds same value as var1 int &var2 = var1; var1 = 10; std::cout < < "var1 = " << var1 << std::endl; std::cout << "var2 = " << var2 << std::endl; } 

Recurso: ENLACE

Una referencia es una etiqueta alternativa, un alias, para el objeto con el que se inicializa. Una vez que se inicializa una referencia, no se puede cambiar para que sea una etiqueta alternativa o alias de algún otro objeto. Después de la inicialización, la referencia o la variable de objeto se pueden usar indistintamente.

Una referencia tiene algunas de las características de un puntero const para un objeto en el sentido de que se inicializa cuando se define. Y aunque se puede cambiar lo que hace referencia o señala, la referencia o el puntero const no se pueden cambiar. Sin embargo, dado que una referencia es una etiqueta alternativa o un alias, puede o no existir realmente como un objeto de datos a diferencia de un puntero de const que probablemente existirá a menos que el comstackdor pueda optimizarlo. E incluso si el comstackdor crea una referencia como una entidad real, esa es la limpieza del comstackdor y debe ignorarse, ya que oficialmente no existe como el hombre detrás de la cortina en la Ciudad Esmeralda.

Las siguientes muestras de código proporcionan ejemplos que comparan y contrastan la referencia con el puntero y const pointer:

 int myInt; // create a variable of type int, value not initialized int myInt2 = 3; // create a second variable of type int with a value of 3 int &rInt = myInt; // create a reference to the variable of type int, myInt rInt = 5; // myInt now has a value of 5, the reference is an alias for myInt rInt++; // myInt now has a value of 6, the reference is an alias for myInt rInt = myInt2; // myInt now has the same value as myInt2, a value of 3 int *pInt = &rInt; // pInt points to myInt (*pInt)++; // increments myInt pInt++; // increments the pointer which formerly pointed to myInt int &rInt2; // error C2530: 'rInt2' : references must be initialized int *pInt2; // just fine, uninitialized pointer is ok int * const pInt3; // error C2734: 'pInt3' : const object must be initialized if not extern int * const pInt4 = &myInt; // define and initialize const pointer pInt4 = &myInt2; // error C3892: 'pInt4' : you cannot assign to a variable that is const 

En realidad, hay dos tipos de referencias: una referencia rvalue y una referencia rvalue .

Una referencia de lvalue es la misma referencia en el lenguaje C ++ antes de C ++ 11. Se rvalue referencia rvalue en C ++ 11 para permitir una referencia a un objeto temporal para ayudar a hacer un movimiento en lugar de una copia y algunas otras acciones en las que una copia es el enfoque incorrecto, pero un movimiento es el enfoque correcto.

Por ejemplo, una comparación de referencia de valor real y referencia de valor r en las siguientes líneas de origen simples. Debido a que estas son referencias int significa que una asignación de un valor no entero da como resultado que el comstackdor realice una conversión que da como resultado una variable temporal. Una referencia rvalue puede vincularse a una variable temporal y una referencia lvalue no puede.

 // assign a double to an int causing creation of temporary int &rIntd1 = 1.2; // error C2440: 'initializing' : cannot convert from 'double' to 'int &' int &&rIntd2 = 1.2; // warning C4244: 'initializing' : conversion from 'double' to 'int', possible loss of data rInt = rIntd2; // myInt from the code above now has a value of 1, 1.2 was truncated when converting from double to int 

Una variable de referencia y una variable de puntero son exactamente lo mismo para la máquina (el comstackdor generará el mismo código de máquina).

Las ventajas más obvias de usar una variable de referencia sobre una variable de puntero en mi conocimiento:

  1. Fácil de entender (sin dirección, eliminar todo tipo de cosas de dolor de cabeza)
  2. Le ahorra un poco de tipeo , y probablemente también menos propenso a errores .

En el siguiente código, el lado izquierdo está usando una variable de referencia, y el lado derecho está usando una variable de puntero. Son lo mismo para la máquina, pero verá que la variable de referencia de uso le ahorra un poco de tipeo.

 Reference variable Pointer variable int a = 1; ~~~~~~ int a = 1; int &b = a; ~~~~~~ int *b = &a; b = 2; ~~~~~~ *b = 2; cout < < a << '\n' ~~~~~~ cout << a << '\n' ============================================== 2 ~~~~~~ 2 

Variables de referencia ( let a ), solo para facilitar la comprensión, otro nombre de variable ( let x ), que tiene la misma ubicación de memoria exacta que la de x .

int &a = x; se refiere a que a tiene la misma ubicación de memoria que la de x .

Por ejemplo, supongamos que dos compañeros de cuarto comparten la misma habitación. El nombre de un amigo es x y el nombre de otro amigo es a . Si a cambia la ubicación de la mesa colocada en la sala, desde la posición (x,y,z) a (x1,y1,z1) , los cambios también serán visibles para friend x y viceversa.

Una referencia es un nombre alternativo para un objeto. Una variable de referencia proporciona un alias para las variables definidas previamente. Una statement de referencia consiste en un tipo de base an y una variable de referencia equivalentes a un nombre de variable.

Página 79 ~ 80 C ++ Primer 5ª ed.

Objeto : una región de memoria que tiene un tipo

Variable : objeto nombrado o referencia

Referencia: un alias para otro objeto.