Frage von Negev, 64

C++ warum [ else if ]?

Servus, warum [ else if ] wenn es ein einfaches [ if ] auch tut? Wenn das erste [ if ] nicht stimmt, springt das Programm einfach zur nächsten Zeilen - mit dem nächsten [ if ]?!

Antwort
von Suboptimierer, 36

Der Unterschied liegt genau da, wo die erste Bedingung nicht stimmt.

if( A )
{...}
else if ( B )
{...}

Der zweite Block wird nur ausgeführt, wenn A falsch ist und B wahr ist.

if( A )
{...}
if( B )
{...}

Der zweite Block wird nur ausgeführt, wenn B wahr ist. Ob A wahr oder falsch ist, spielt keine Rolle.

Wenn A B naturgemäß ausschließt, bleibt wenigstens noch ein Performancegewinn, denn bei A wird im else auf B nicht mehr geprüft.

Schließen sich A und B naturgemäß aus, wird dennoch häufig auf das else verzichtet, weil sich die Bedingungen leserlicher untereinander schreiben lassen.
Das ist aber ein stilistischer Grund. Besser ist die Verwendung von else.

Antwort
von CrystalixXx, 43

... und andersherum: wenn die erste Bedingung eintrifft, dann wird trotzdem die zweite geprüft. Das bedeutet unnötigen Rechenaufwand. Noch dazu kann es zu unvorhergesehenen Problemen führen, wenn beide If-Bedingungen wahr sind und beide Verzweigungen ausgeführt werden. Das möchte man schließlich nicht immer.

(Deswegen bezeichnet man If öfters auch als bedingte *Sprünge*.)

Antwort
von Berny96, 25

Optimierung. Das Programm muss, angenommen wir befinden uns in einer aufwendigen Schleige nicht jedes mal alles abfragen sondern weiss er muss nur B abfragen wenn A nicht stimmt. Es gibt halt fälle wo B nur stimmt wenn a nicht stimmt aber es gibt auch fälle wo A und B gleichzeitig stimmen können. Im ersten fall mit else und im zweiten ohne. 

Antwort
von Rakisch, 34

1. Damit man weiß das es zusammen gehört (übersicht)

2. Da es den command "else" gibt, der eintritt wenn alle anderen if und dazugehörigen else if nicht eintreten.

Antwort
von wotan38, 7

Wie kommst Du darauf, dass [else if] und [if] das Gleiche machen? Das erstere wird ausgeführt, wenn der vorangegange [if] auf false verzweigt, das zweite immer. 

Antwort
von kordely, 8

Wenn die Bedingungen schließen einander aus, dann ist das Optimierung. 

Wenn nicht das ist, dann werden die zwei Strukturen anders bedeuten.

Antwort
von TeeTier, 6

Pseudocode sagt mehr als jede lange Erklärung:

i = 5;

if (i > 6) { // trifft NICHT zu
print("a");
}

if (i > 4) { // trifft zu
print("b");
}

if (i > 2) { // trifft zu
print("c")
}

Das liefert dir folgende Ausgabe:

b
c

Der gleiche Code mit "if else" hingegen ...

i = 5;

if (i > 6) { // trifft NICHT zu
print("a");
} else if (i > 4) { // trifft zu
print("b");
} else if (i > 2) { // wird ÜBERSPRUNGEN
print("c");
}

... gibt nur ...

b

... aus!

Alles klar? ;)

Keine passende Antwort gefunden?

Fragen Sie die Community