¿Cómo pasar argumentos a funciones en C++: por valor o por referencia?

Como Pasar Argumentos A Funciones En C Por Valor O 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 utilizar para pasar parámetros. Ambos enfoques tienen ventajas y desventajas, por lo que es fundamental que los programadores sepan cuándo utilizar cada uno.

1: pasar argumentos por valor

Se hace una copia de la variable y se proporciona a la función cuando los argumentos se pasan por valor . Todas las modificaciones hechas 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, podría 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 los recursos de CPU y memoria. Además, pasando por valor no se puede usar 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 pasado 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 a la variable dentro de la función también afectará a 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 deseadas, una función debe designarse explícitamente como const. Agregar la palabra clave const a la declaración de la función, como en 'int calcule (const int& a, const int& b)', logrará esto.



Sin embargo, pasar argumentos por referencia también requiere una cuidadosa atención a los detalles. Los programadores sin experiencia pueden cometer errores, como crear efectos secundarios no intencionales, compartir datos sin querer y anular datos externos.





Considere el siguiente código que demuestra ambos métodos de paso de argumentos :

#incluir

usando el espacio de nombres estándar ;

vacío PasarPorValor ( En t X ) {

X = 5 ;

cout << 'Dentro de PassByValue:' << X << final ;

}

vacío PasarPorReferencia ( En t & X ) {

X = 5 ;

cout << 'Dentro de PassByReference:' << X << final ;

}

En t principal ( ) {

  En t numero1 = 2 , numero2 = 2 ;

cout << 'Antes de las llamadas a funciones: num1= ' << numero1 << 'num2=' << numero2 << final ;

PasarPorValor ( numero1 ) ;

PasarPorReferencia ( numero2 ) ;

cout << 'Después de llamadas a funciones: num1= ' << numero1 << 'num2=' << numero2 << final ;

devolver 0 ;

}

En el código anterior, la primera función, PasarPorValor , 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, PasarPorReferencia , recibe un argumento entero por referencia. En este caso, la función manipula directamente la variable original.



Producción

Como era de esperar, la primera llamada genera 5, pero no tiene efecto en la variable original. Por el contrario, 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 a la función debe incluir el valor de la variable, como `calculate(a, b)`. Cuando pasando por referencia , la llamada a la función debe incluir la dirección de memoria de la variable, simbolizada por un carácter ampersand, como `calculate(&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 pretende modificar la variable original. Pasando por referencia es más apropiado para tipos de datos grandes o complejos, o cuando la función pretende modificar el valor de la variable original.

Conclusión

Cuando los parámetros son pasado por valor a una función, se crea y proporciona una copia de la variable. Por pasando por referencia , la variable original se envía a la función. En 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 enfoque puede dar como resultado un código más eficaz, a pesar de la tentación de utilizar el más fácil pasando por valor método.