Dev - C++ - Buenas o malas practicas

 
Vista:
Imágen de perfil de Dennis
Val: 141
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Buenas o malas practicas

Publicado por Dennis (63 intervenciones) el 06/06/2021 03:03:37
Hola a todos y saludos.
El uso exesivo de la referencia es una mala práctica.
Gracias de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 338
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Buenas o malas practicas

Publicado por Martín (158 intervenciones) el 06/06/2021 06:38:19
¿A qué te refieres?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Dennis
Val: 141
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Buenas o malas practicas

Publicado por Dennis (63 intervenciones) el 06/06/2021 08:29:31
A que si cada vez que creo una funcion y le paso valores por referencia, estara mal hacerlo en todos los casos.
Es decir, no hay casos en los que puedas hacerlo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 338
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Buenas o malas practicas

Publicado por Martín (158 intervenciones) el 06/06/2021 10:57:00
Yo diría que las funciones reciben parámetros por referencia cuando se necesita o cuando conviene, otras veces convendrá pasar por valor (copia) y otras por dirección (puntero).

Aquí van algunos ejemplos elementales...

1
int suma(int a, int b) { return a+b; }

si tienes que diseñar una función "suma", que tome dos enteros y devuelva la suma, esos dos enteros se pasarán por valor, es más eficiente que pasarlos por referencia.

Si la función opera sobre algún objeto grande, probablemente convenga pasarlo por referencia. Si se pretende modificar será una referencia a secas; si no se pretende modificar, será una referencia constante.
1
2
void f(ObjetoTremendo& modificable);
void f2(const ObjetoTremendo& no_modificable);

Cuando se necesita que la función opere sobre una copia del argumento de llamada, en general conviene dejar al compilador que la haga, los parámetros de la función son un muy buen lugar para eso. Por ejemplo, si se desea pasar todos los caracteres de una string a mayúsculas sin modificar la string original:
1
2
3
void aMayusculas(string copia) {
... // adentro de la función "copia" ya es una copia de la string que se usó para la llamada.
}

Hay otros casos en que la cosa es al revés; por ejemplo, si la función va a tomar como argumento un objeto temporal (un rValue), probablemente se prefiera un parámetro por valor y asignarlo usando "std::move". (must see https://channel9.msdn.com/Shows/Going+Deep/Cpp-and-Beyond-2012-Scott-Meyers-Universal-References-in-Cpp11)

... El C++ es un lenguaje potente pero complejo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de Dennis
Val: 141
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Buenas o malas practicas

Publicado por Dennis (63 intervenciones) el 06/06/2021 11:22:52
Gracias, ha sido de muchísima ayuda
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Buenas o malas practicas

Publicado por David (1 intervención) el 17/06/2021 22:59:48
En realidad pasar por referencia es más eficiente que por valor. Al hacerlo por valor deben crearse esas nuevas variables, implica reservar en memoria, etc.. La referencia hay que entenderla como algo "similar" a un puntero que no puede ser null. El motivo real por el que es una mala práctica es que al pasar por referencia la función podría modificar esas variables fuera de la propia función, y rara vez es algo que convenga que suceda. Por eso normalmente se suelen pasar por valor, para que al trabajar con esas variables no se sobreescriba el valor "fuera" de la función. Lo más correcto a mi entender es pasar la referencia constante como dices, siempre que se pueda, que normalmente es cuando no se van a modificar los valores dentro de la propia función.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar