Was kostet mehr Zeit: Überladen einer Funktion oder if-else zweig?
-
Hallo,
ich kann keinerleich zeitunterschiede merken wenn ich in einer for-schleife die z.B 1000mal läuft entweder if-else oder mit überladung unterschiedliche funktionen aufrufe. Hat jemand vielleicht eine Aussage die mir weiterhilft? Also was dann doch schneller sein sollte?
-
probiers aus
-
Hab ich doch geschrieben - ich habs schon probiert kann aber keine unterschiede festestellen
-
Also so in etwa:
for (int i = 0;...) { if (variable == ...) else if (variable == ...) else if (variable == ...) };spontan würde ich das Überladen bevorzugen
Ausser du nutzt in deiner Schleife konstante Bedingungen, dann kann ein Compiler dir die Schleife ohnehin zusammenlegen
oder (wenns geht) lass die Schleife 10 Milliarden Mal durchlaufen und probiers aus

-
konstante Bedingungen, dann kann ein Compiler dir die Schleife ohnehin zusammenlegen
was meinst du mit konstante bedingungen?
-
zzt schrieb:
konstante Bedingungen, dann kann ein Compiler dir die Schleife ohnehin zusammenlegen
was meinst du mit konstante bedingungen?
angenommen
const int x = 10; if (x == 10) { machwas(); } else if (x == 20) { machwasanderes(); }in so einem fall wird der compiler den else-block wohl ausradieren
mal so als grundsätzlicher tipp: vermeide if-Abfragen, wenn es geht. Auf Prozessor-Ebene sind das Flaschenhälse, also bremsen viele ifs ein Programm nur aus.
-
eine if-Anweisung ist doch etwas ganz anderes, als eine Funktionsüberladung. Die beiden haben nicht viel miteinander zu tun.
Mit einer if-Anweisung kannst du zur Laufzeit überprüfen, ob eine bestimmte Aussage erfüllt ist, oder nicht und in Abhängigkeit davon dann verschiedene Aktionen ausführen.
Bei einer Funktionsüberladung definierst du mehrere Funktionen, die den gleichen Namen, aber unterschiedliche Parameter haben (Anzahl, Typ). Dann wird zur Compile-Zeit entschieden, welche Funktion aufgerufen wird.
Da bei Funktionsüberladungen die Entscheidung zur Compile-zeit getroffen wird, gibt es keine Laufzeitverschlechterung (außer den Aufruf der Funktion).
Es sind also beides komplett verschiedene Konzepte, die man bezüglich der Laufzeit überhaupt nicht vergleichen kann.
Felix