|
C-/C++-Quelltext
|
1
|
if(Variable & Flag) Funktion();
|
ist doch dasselbe wie
|
C-/C++-Quelltext
|
1
|
if(Variable && Flag) Funktion();
|
Sei Variable false und Flag true.
if (Variable & Flag) Funktion();
Der Compiler stellt fest: Variable ist 0, Flag ist 1, 0 & 1 = 0
if (Variable && Flag) Funktion();
Der Compiler stellt fest: Variable ist 0, also ist das Ergebnis der and Verknüpfung in jedem Fall false, bzw 0. Die Untersuchung von Flag findet gar nicht statt.
Das ist zB hier wichtig:
if (!!Objekt & Objekt->IrgendeinBoolWert) Funktion();
Löst eine Zugriffsverletzung aus für Objekt = 0
if (!!Objekt && Objekt->IrgendeinBoolWert) Funktion();
Löst keine Zugriffsverletzung aus wenn Objekt = 0, da Objekt->IrgendeinBoolWert nicht mehr untersucht wird.
Ich hoffe das war verständlich soweit.
Edit: Ich hab mal gerade Patricks Beitrag gelesen und da das was er sagt im Widerspruch steht zu dem was ich sage und ich dauernd alles durcheinander haue könnte es sein das ich falsch liege. So wie ich es beschrieben habe ist es jedenfalls in Java.