Erfordert der ANSI-Standard , dass die logischen Operatoren in C oder C ++ kurzgeschlossen werden?
Ich bin verwirrt, weil ich mich an das K & R-Buch erinnere, in dem es heißt, Ihr Code sollte nicht davon abhängen, dass diese Vorgänge kurzgeschlossen werden, da dies möglicherweise nicht der Fall ist. Könnte jemand bitte darauf hinweisen, wo im Standard gesagt wird, dass logische Operationen immer kurzgeschlossen sind? Ich interessiere mich hauptsächlich für C ++, eine Antwort auch für C wäre toll.
Ich erinnere mich auch daran, dass ich gelesen habe (ich kann mich nicht erinnern, wo), dass die Auswertungsreihenfolge nicht streng definiert ist, sodass Ihr Code nicht davon abhängen oder annehmen sollte, dass Funktionen innerhalb eines Ausdrucks in einer bestimmten Reihenfolge ausgeführt werden: Am Ende einer Anweisung werden alle Funktionen, auf die verwiesen wird wird aufgerufen worden sein, aber der Compiler hat die Freiheit, die effizienteste Reihenfolge auszuwählen.
Gibt der Standard die Bewertungsreihenfolge dieses Ausdrucks an?
if( functionA() && functionB() && functionC() ) cout<<"Hello world";