PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C++ && und || Auswertung


Gast
2007-09-27, 11:52:35
Moin,

ich frage mich gerade, ob es sicher ist, daß bei logischen Verknüpfungen unnötige Fälle nie betrachtet werden? D.h. machen das (einige) Compiler nur so, weil es sinnvoll ist, oder ist das im Standard drin? Bzw. verletzten Compiler in diesem Fall den Standard?

Also...

if ( testA() || testB() );
if ( testC() && testD() );

Wenn testA() = true, wird dann sicher testB() nicht aufgerufen?
Wenn testC() = false, wird dann sicher testD() nicht aufgerufen?

danke

patermatrix
2007-09-27, 12:25:40
if ( testA() || testB() );
if ( testC() && testD() );

Wenn testA() = true, wird dann sicher testB() nicht aufgerufen?
Wenn testC() = false, wird dann sicher testD() nicht aufgerufen?

danke
Nein, wieso auch? Das Ergebnis steht ja, wie gesagt, schon fest.

Gast
2007-09-27, 12:31:57
Nein, wieso auch? Das Ergebnis steht ja, wie gesagt, schon fest. Von meiner Seite gibt es keinen Grund sowas zu machen, ich will aber sichergehen, daß dies wirklich keiner macht.

Trap
2007-09-27, 12:40:58
ich frage mich gerade, ob es sicher ist, daß bei logischen Verknüpfungen unnötige Fälle nie betrachtet werden? D.h. machen das (einige) Compiler nur so, weil es sinnvoll ist, oder ist das im Standard drin?
Ist im Sprachstandard so vorgeschrieben, nennt sich "short cut evaluation".

Gast
2007-09-27, 12:42:54
klasse, danke.

AlSvartr
2007-09-28, 00:17:11
Ärgerlich wirds erst, wenn jemand das nicht weiß und mit Seiteneffekten programmiert, die im nicht ausgewerteten Teil des boolschen Ausdrucks auftreten und sich dann wundert ;)

Gast
2007-09-28, 07:57:31
Bei mir ist es gerade andersherum. :) Ich habe 4 veroderte Funktionen, die ein Problem lösen können - die sind nach Aufwand sortiert und wenn die erste (und schnelle) es nicht schafft, soll die nächste bis zur letzten (und auffwenigsten) es versuchen - wenn die letzte es nicht schafft gibt es keine Lösung. Die Qualität der Lösungen ist gleich, aber in einigen Fällen kann man das Problem deutlich vereinfacht lösen.