Ist Kurzschluss logische Operatoren beauftragt? Und Bewertung um?

Nicht dem ANSI-standard Mandat das logische Operatoren, die kurzgeschlossen werden, entweder in C oder C++?

Ich bin verwirrt, denn ich erinnern an die K&R Buch, dass Ihr code sollte nicht hängen diese Vorgänge wird kurzgeschlossen, für Sie möglicherweise nicht. Könnte mir bitte jemand zeigen, wo in der Norm sagt, die Logik ops sind immer kurzgeschlossen? Ich bin hauptsächlich daran interessiert, auf C++, eine Antwort auch für C wäre toll.

Ich auch gelesen (kann mich nicht erinnern wo), dass die Bewertung Reihenfolge ist nicht streng definiert, so dass Ihr code sollte sich nicht darauf verlassen oder davon ausgehen, die Funktionen innerhalb eines Ausdrucks ausgeführt werden würde, die in einer bestimmten Reihenfolge: von das Ende einer Anweisung alle referenzierten Funktionen werden aufgerufen wurden, aber der compiler hat die Freiheit in der Auswahl der effizientesten Reihenfolge.

Nicht die standard-geben Sie die Bewertung, um dieser Ausdruck?

if( functionA() && functionB() && functionC() ) cout<<"Hello world";
Vorsichtig: Es ist wahr für POD-Typen. Aber wenn Sie überladen Sie den operator && oder-operator || für eine bestimmte Klasse diese sind NICHT, ich wiederhole NICHT-Verknüpfung. Dies ist der Grund, warum es ist ratsam, dass Sie NICHT definieren diese Operatoren für eigene Klassen.
Ich definierte diese Operatoren eine Weile her, als ich eine Klasse angelegt, die tun, einige grundlegende Boolesche algebra Operationen. Wahrscheinlich sollte der stick eine Warnung Kommentar "das zerstört Kurzschluss-und Links-rechts-Auswertung!", falls ich dies vergessen. Auch überlastet */+ und machten Sie zu Ihren Synonymen 🙂
Mit der Funktion Anrufe in einer if-block ist kein guter Programmierstil. Haben immer eine variable deklariert, die jeweils den Rückgabewert der Methode und verwenden Sie es in den if-block.
Das ist nicht korrekt. Was Sie willkürlich beschreiben als schlechte Praxis geschieht die ganze Zeit, vor allem mit Funktionen, die Boolesche Werte, als hier.

InformationsquelleAutor Joe Pineda | 2009-03-10

Schreibe einen Kommentar