Ich habe ein Programm geschrieben, das Fehler in einer Menge von Dingen auflistet und einen booleschen Wert am Ende zurückgibt (wahr ist, bedeutet, dass kein Fehler gefunden wurde).
Hier ist eine Zusammenfassung meines Codes:
%Vor% Ich bin zuversichtlich, dass der Wert von result
am Ende der richtige sein wird. Ich möchte jedoch sicher sein, dass alle Funktionen checkStuffX()
aufgerufen werden (weil sie beim Versagen Fehlermeldungen ausgeben und ich möchte, dass alle Fehlermeldungen gedruckt werden).
Ich weiß, dass wenn ich auf diese Weise schrieb, alle checkStuffX()
überspringen würden, nachdem die erste fehlgeschlagen ist:
Ich weiß auch, dass wenn ich auf diese Weise schreibe, es alle checkStuffX()
Funktionen aufrufen würde:
Aber ich habe mich gefragt, ob das Verhalten des Codes, den ich benutze, mit bitweisem Vergleich vom Standard bestimmt und garantiert wird?
Oder besteht die Gefahr von undefiniertem Verhalten, abhängig vom verwendeten Compiler und seinen Optimierungen?
Das ist völlig in Ordnung.
Die Kurzschlussauswertung, auf die Sie sich beziehen, gilt nur für die Operatoren &&
und ||
.
Es würde funktionieren, obwohl Conversion int & lt; - & gt; bool vielleicht Performance-Problem, wenn Sie viele Prüfungen haben. Oh, Sie können Funktionszeiger und for-Schleife nutzen, wenn alle Funktionen denselben Typ haben.
%Vor% Code würde einfacher aussehen, wenn Sie für () - wie for(auto i : checks)
verwenden können. Vorteil, wenn Sie diese Prozedur irgendwo anders im Code deklariert haben, müssen Sie einen Schritt entfernen oder hinzufügen, Sie ändern einfach die Deklaration des Arrays (oder Ihr Programm kann sie ändern, was den Workflow effektiv verändert!). Nachteil - Sie können es nicht mit Schecks verwenden, die verschiedene Prototypen haben.
Tags und Links c++ boolean bitwise-operators