2010-01-21 15 views

Respuesta

7

Esencialmente, un parámetro de una función es una variable local, por lo que esta práctica no es mala en principio.

Por otro lado, hacer esto puede llevar a dolores de cabeza de mantenimiento. Si otro programador aparece más tarde, podría esperar que la variable contenga el valor pasado, y el cambio causará un error.

Una justificación para reutilizar la variable es una noción errónea de la eficiencia del uso de la memoria. En realidad, no puede mejorar la eficiencia y puede disminuirla. La razón es que el compilador puede detectar automáticamente si es útil usar el mismo registro para dos variables diferentes en dos momentos diferentes, y lo hará si es mejor. Pero el programador no debe tomar esa decisión para el compilador. Eso limitará las elecciones que el compilador puede hacer.

La práctica más segura es utilizar una nueva variable si necesita un nuevo valor y confiar en el compilador para hacerlo eficiente.

+4

Desde la perspectiva del compilador, cada asignación a una variable existente se puede tratar como una nueva variable. Entonces el compilador puede hacer que el código sea igual de eficiente ya sea que el programador haya creado una nueva variable o no. De hecho, la mayoría de las microarquitecturas han cambiado de nombre de registro de todos modos, por lo que el compilador ni siquiera tiene que molestarse. –

2

No hay problema en absoluto de lo que pueda pensar. Los argumentos se colocarán en el marco de la pila actual o en registros como cualquier otra variable local. Sin embargo, asegúrese de que los argumentos se pasen por valor. En particular, las matrices se pasan por referencia.

+0

También creo que está perfectamente bien usar argumentos que se pasan por valor como variables temporales y modificarlos: al menos está guardando algo de espacio en la pila (si la pila se usa para mantenerlos); También he visto a Stroustrup usarlo de esta manera en su código de ejemplos en el libro de C++. – cforfun

Cuestiones relacionadas