variablen in schleifen
-
Hi jungens und mädels
was ist besser?
void func() { // ... { int i, j; for(i = 0; i <= 1000; ++i) { for(j = 0; j <= 1000; ++j) { cout << "lol" << i << j << endl; } } } // ... }oder
void func() { // ... for(int i = 0; i <= 1000; ++i) { for(int j = 0; j <= 1000; ++j) { cout << "lol" << i << j << endl; } } // ... }bei if abfragen sit das ja klar, weil da wird die innere variable ja nur einmal erzeugt und gelöscht und vor allem kann man sie sich ganz sparen wenn die abfrage nicht zu zutrifft
aber in shcleifen? da wird ja dann bei jeden durchlauf die innere variable neu erzeugt und auch wieder gelöscht oder?
-
Nö. Sind ja primitive Datentypen. Ist kein Unterschied. Zumindest sollte nicht. Gängige Compiler reservieren für das zweite int in der Schleife einmal den Platz und greifen da immer stumpf drauf zu. Ohne jegliche Extra-Initialisierung, Speicherplatzreservierung oder sonstwas.
-
Skym0sh0 schrieb:
aber in shcleifen? da wird ja dann bei jeden durchlauf die innere variable neu erzeugt und auch wieder gelöscht oder?
j wird jedesmal neu erstellt, ja, bzw. es ist garantiert, dass jeweils Konstruktor und Destruktor aufgerufen werden. Und das braucht jeweils 0,00000000000000000000000000000000000000000000....000001 Sekunden :p
Oder anders gesagt, das wird sicher dein Programm nicht bremsen! Und die erste Version sieht einfach nur hässlich aus.Grüssli
-
Dravere schrieb:
Oder anders gesagt, das wird sicher dein Programm nicht bremsen! Und die erste Version sieht einfach nur hässlich aus.
Nebenbei angemerkt kann eine reine Zuweisung
i=0auch langsamer sein als eine Initialisierung
int i=0.
-
Kritiker schrieb:
Nebenbei angemerkt kann eine reine Zuweisung
i=0auch langsamer sein als eine Initialisierung
int i=0.
Und wiso?
bei der initialisierung muss unter umständen noch der stackpointer decrementiert werden,
mit 0 muss der speicher in beiden fällen beschrieben werden.
-
vlad_tepesch schrieb:
Kritiker schrieb:
Nebenbei angemerkt kann eine reine Zuweisung
i=0auch langsamer sein als eine Initialisierung
int i=0.
Und wiso?
Wieso nicht? Denk nur mal an Klassentypen...
bei der initialisierung muss unter umständen noch der stackpointer decrementiert werden,
mit 0 muss der speicher in beiden fällen beschrieben werden.
Bla.
In C++ gibt's keinen Stackpointer.Und wenn du schon eine konkrete Implementierung betrachten willst die einen Stackpointer hat und diesen verwendet um lokale Variablen zu adressieren, dann könnte diese konkrete Implementierung gut und gerne darauf verzichten den Stackpointer die ganze Zeit über anzupassen, bloss weil irgendwo ein Scope von irgendwas anfängt/endet.