Verhalten logischer Operatoren
-
mal ne kurze Verständnisfrage:
oft ist es ja so, dass man die weitere Ausführung eines Programms von der Rückgabe einer Methode abhängig machen will
if ( myClass->methode() ) { // ... }allerdings sollte man den Pointer vorher auf null prüfen, damit sich das Programm nicht ins Nirvana verabschiedet
mein Gedanke ist also folgender:
if ( myClass && myClass->methode() ) { // ... }allerdings weiß ich nicht, ob das Verhalten da definiert ist. Wird der rechte Teil noch geprüft, wenn der linke bereits false liefert? Ein erster Test ergab zwar nein, aber ich bin mir nicht sicher, ob das generell so ist
-
Jo, das geht und wird in der Praxis auch recht häufig gemacht. Das nennt man "short-circuit evaluation" und lässt sich per Compiler-Flag abstellen.
-
danke... mehr wollt ich nicht wissen... spart mir einige unnötige if-Abfragen und somit Verschachtelungen ^^
-
Das funktioniert allerdings nur solange es der eingebaute op&& ist. Wenn man den für irgendeine Klasse überlädt und diese Überladung aufruft, dann gleift die short circuit evaluation nicht. Für op|| gilt natürlich das selbe.
-
Tachyon schrieb:
lässt sich per Compiler-Flag abstellen.
Echt? Bei welchem Compiler?
-
seit wann kann man das abstellen?
das ist doch kein compiler-feature.
das sind doch definierte regeln. abbruch sobald sich am wahrheitsgehalt des gesamten ausdrucks nichts mehr ändern kann, braucht man nicht weiter zu fragen.falls es doch geht, würde mich das aber auch interessieren.