¿Qué es la variable de referencia en C ++ y por qué se usa? ¿Cómo se relaciona con la variable de valor y la variable de puntero?

La variable de referencia no es más que un contenedor alrededor de un puntero con algunas funciones adicionales y algunas limitadas para proporcionar la seguridad en el programa.

Funcionalidad adicional:

  • Typecast forma una variable a su referencia es interna.

Ex:

intercambio nulo (int & a, int & b)
{
int tmp = a;
a = b;
b = tmp;
}

//Llamada de función:
int main ()
{
int a = 5, b = 6;
intercambio (a, b);
std :: cout << a << b; // Imprime 65
devuelve 0;
}

En contraste, si se hubiera hecho con punteros:

intercambio nulo (int * a, int * b)
{
int tmp = * a;
* a = * b;
* b = tmp;
}

//Llamada de función:
int main ()
{
int a = 5, b = 6;
intercambio (& a, & b);
std :: cout << a << b; // Imprime 65
devuelve 0;
}

Entonces, el código se ve limpio. No es necesario escribir más * (operador de referencia) y & (operador de referencia).

  • En cuanto a la seguridad: puede hacer * (a + 1) y puede acceder a la ubicación inaccesible. (Debería dar una falla de segmentación en el caso ideal). Pero no puede hacer esto con la variable de referencia.

Limitaciones:

  • No puede usar la aritmética de puntero en las variables de referencia.
    • Solución: como la aritmética de puntero solo es válida para los elementos de tipo contenedor, C ++ proporciona un iterador para eso y se puede usar la aritmética con eso, pero de manera limitada para proporcionar la seguridad.

  • La variable de referencia es solo otro nombre para la variable a la que se refiere. Lo usaría cuando solo quisiera pasar el valor en lugar de copiar la misma variable en la memoria en una ubicación diferente. Copiar programas pequeños no es un gran problema, pero si se copian grandes cantidades de memoria pueden ralentizar mucho los programas. (Piense en las referencias como alias para el nombre de las variables originales)
  • Un puntero apunta a la dirección de memoria del objeto al que apunta. Accedió indirectamente a un objeto y es muy parecido a un iterador.
  • pasar por valor como dije anteriormente copia la misma variable en la memoria nuevamente.

Siempre debe intentar pasar por referencias o punteros siempre que sea posible, es mucho más eficiente que pasar por valor.
Yo personalmente elegiría la referencia siempre que sea posible solo porque es una sintaxis menos pequeña que el puntero.

¡Espero que esto ayude!

La variable de referencia en C ++ es un alias para la variable existente. No almacenan nada más que la dirección de la variable utilizada en el momento de la declaración de la variable de referencia. Es importante asignar un valor a la variable de referencia en el momento de la declaración; de lo contrario, mostrará un error.

int a = 2;
int & aref = a; // aref tiene la misma dirección que un
cout << a << "" << aref << endl;
cout << & a << "" << & aref << endl:

SALIDA:
2 2
0x7fff087282ec 0x7fff087282ec

More Interesting

Cómo encontrar un algoritmo para encontrar tanto el mínimo como el máximo de n números usando menos de 3n / 2 comparaciones

¿En qué subáreas de matemáticas debería centrarme para mejorar mis algoritmos en informática?

¿Cuál es el significado del lema de aislamiento?

¿Qué tan útil será el algoritmo de Shor para las computadoras cuánticas?

¿El concepto de implicación en matemáticas y ciencias de la computación preocupa a todos, o solo soy yo?

Cómo reducir el problema del camino hamiltoniano al ciclo hamiltoniano (para demostrar que este último es NP-completo)

¿Cuál es la diferencia entre Basic Auth, Digest Auth, oAuth1.0 y oAuth2.0? ¿Cuál es un ejemplo de cada uno en el núcleo de PHP?

Si soy bueno en matemáticas, ¿seré bueno en programación?

¿Es posible construir una máquina de Turing omnipotente?

Cómo ser bueno en matemáticas para la programación competitiva

¿Podrán las computadoras multiplicarse 99,999,999,999 veces 999,999,999,999?

Se nos dan probabilidades [matemáticas] P (A) = P (B) = P (C) \ geq 2/3 [/ matemáticas] y sabemos que [matemáticas] P (A \ cap B \ cap C) = 0 [/ mates]. ¿Qué podemos decir sobre [matemáticas] P (A) [/ matemáticas]?

¿Cuál es el algoritmo para encontrar todas las soluciones de hacer 100 de 1-2-3-4-5-6-7-8-9 en orden?

Cómo demostrar esta congruencia si p es un primo mayor que 3 de modo que 1 ^ 2 + 2 ^ 2 + 3 ^ 2 + 4 ^ 2… (p-1) ^ 2 = 0 (mod p)

¿Es Java crucial para comprender completamente la POO?