Cómo pasar argumentos a las funciones en C ++ por valor vs. Por referencia?

Cómo pasar argumentos a las funciones en C ++ por valor vs. Por referencia?
Cualquier lenguaje de programación, incluido C ++, debe tener la capacidad de proporcionar parámetros a las funciones. Por valor y por referencia son los dos métodos principales que se pueden usar para pasar los parámetros. Ambos enfoques tienen beneficios y inconvenientes, por lo que es crucial que los programadores sepan cuándo utilizar cada uno.

1: Pasar argumentos por valor

Se realiza una copia de la variable y se proporciona a la función cuando Los argumentos se pasan por valor. Todas las modificaciones realizadas a la variable dentro de la función solo afectan la copia; Nada se cambia a la variable original. Como resultado, Pasando por valor es un método seguro porque no hay posibilidad de modificar involuntariamente el valor de la variable original.

Pasando por valor, Sin embargo, puede ser ineficaz, especialmente cuando se trata de tipos de datos grandes o complicados. Cada llamada de función que requiere una copia de los datos puede agotar rápidamente la CPU y los recursos de memoria. Además, Pasando por valor no se puede utilizar para funciones que tienen como objetivo cambiar el valor de la variable original porque la copia y la variable original no están vinculadas.

2: Pasar argumentos por referencia

Las variables pueden ser aprobado por referencia en C ++ también, lo que ayuda a resolver estos problemas. La variable original se envía a la función cuando Pasando por referencia, y cualquier modificación realizada en la variable dentro de la función también afectará la variable original. Debido a esto, Pasando por referencia es sustancialmente más efectivo para tipos de datos grandes o complicados y evita la necesidad de copiar.

Para evitar modificaciones no intencionadas, una función debe designarse explícitamente como constante. Agregar la palabra clave const a la declaración de función, como en "int calcular (const int & a, const int & b)", lo logrará esto.

Sin embargo, Pasando argumentos por referencia requiere una atención cuidadosa al detalle también. Los programadores sin experiencia pueden cometer errores, como crear efectos secundarios involuntarios, compartir datos no intencionados y anular datos externos.

Considere el siguiente código que demuestra ambos Métodos de aprobación de argumentos:

#incluir
usando el espacio de nombres STD;
nulo passByValue (int x)
x = 5;
cout << "Inside PassByValue: " << x << endl;

nulo passByReference (int & x)
x = 5;
cout << "Inside PassByReference: " << x << endl;

int main ()
int num1 = 2, num2 = 2;
cout << "Before function calls: num1= " << num1 << " num2= " << num2 << endl;
Passbyvalue (num1);
PassByReference (num2);
cout << "After function calls: num1= " << num1 << " num2= " << num2 << endl;
regresar 0;

En el código anterior, la primera función, Valor de pass, recibe un argumento entero por valor. Dentro de la función, se crea una nueva variable entera y se le asigna el valor 5. El entero original permanece sin modificar. La segunda función, Referencia de passby, recibe un argumento entero por referencia. En este caso, la función manipula directamente la variable original.

Producción

Como se esperaba, la primera llamada emite 5, pero no tiene ningún efecto en la variable original. En contraste, la segunda llamada cambia el valor de Num2 a 5, lo que afecta la salida de la declaración final.

Pasar por valor vs. Pasar por referencia

1: forma de llamar a una función

Una diferencia entre Pasando por valor y Pasando por referencia es como se llama la función. Cuando Pasando por valor, La llamada de función debe incluir el valor de la variable, como 'calcular (a, b)'. Cuando Pasando por referencia, La llamada de función debe incluir la dirección de memoria de la variable, simbolizada por un carácter de ampersand, como 'calcular (& a, & b)'.

2: Tipos de datos

En general, Pasando por valor es más apropiado cuando se trabaja con tipos de datos pequeños o simples, o cuando la función no está destinada a modificar la variable original. Pasando por referencia es más apropiado para tipos de datos grandes o complejos, o cuando la función está destinada a modificar el valor de la variable original.

Conclusión

Cuando los parámetros son pasado por valor a una función, se crea y suministra una copia de la variable. Por Pasando por referencia, La variable original se envía a la función. Cª++, Pasar argumentos por valor o por referencia es un concepto fundamental. Elegir el enfoque correcto depende de las circunstancias específicas y debe evaluarse cuidadosamente. Los beneficios de usar el referencia El enfoque puede dar lugar a un código más efectivo, a pesar de la tentación de usar el más fácil Pasando por valor método.