2010-01-21 24 views

Antwort

7

Im Wesentlichen ist ein Parameter einer Funktion eine lokale Variable, daher ist diese Vorgehensweise im Prinzip nicht schlecht.

Auf der anderen Seite kann dies zu Wartung Kopfschmerzen führen. Wenn ein anderer Programmierer später kommt, könnte er erwarten, dass die Variable den übergebenen Wert enthält, und die Änderung wird einen Fehler verursachen.

Eine Rechtfertigung für die Wiederverwendung der Variablen ist eine fehlgeleitete Vorstellung von der Effizienz der Speichernutzung. Tatsächlich kann es die Effizienz nicht verbessern und kann es verringern. Der Grund ist, dass der Compiler automatisch erkennen kann, ob es nützlich ist, zu zwei verschiedenen Zeiten das gleiche Register für zwei verschiedene Variablen zu verwenden, und wird es tun, wenn es besser ist. Aber der Programmierer sollte diese Entscheidung nicht für den Compiler treffen. Das wird die Auswahl einschränken, die der Compiler machen kann.

Am sichersten ist es, eine neue Variable zu verwenden, wenn sie einen neuen Wert benötigt, und sich auf den Compiler zu verlassen, um sie effizient zu machen.

+4

Aus Sicht des Compilers kann jede Zuweisung zu einer vorhandenen Variablen als neue Variable behandelt werden. So kann der Compiler den Code genauso effizient machen, ob der Programmierer eine neue Variable erstellt hat oder nicht. Tatsächlich haben die meisten Mikroarchitekturen sowieso Registerumbenennung, so dass der Compiler nicht einmal stören muss. –

2

Keine Probleme überhaupt, die ich mir vorstellen kann. Die Argumente werden entweder wie alle anderen lokalen Variablen im aktuellen Stapelrahmen oder in Registern platziert. Stellen Sie jedoch sicher, dass die Argumente nach Wert übergeben werden. Insbesondere werden Arrays als Referenz übergeben.

+0

Ich denke auch, es ist völlig in Ordnung, Argumente, die als temporäre Variablen übergeben werden, zu verwenden und sie zu ändern: zumindest sparen Sie etwas Stapelspeicherplatz (wenn Stapel verwendet wird); Ich habe auch Stroustrup auf diese Weise in seinem Beispielcode in C++ Buch gesehen. – cforfun

Verwandte Themen