if???
-
Hi,
kann man davon ausgehen, dass der Code in den Klammern immer ausgeführt wird???int i=1; if(i) { }int i=0; if(!i) { }int i=IrgendwasUngleichNull; if(i) { }
-
Ich denke mal dass der Compiler da bestimmte Sachen wegoptimieren darf, aber wichtige Sachen wie irgendwelche Funktionen die Attribute von Klassen ändern und was-weiß-ich-nicht trotzdem ausführen muss um den Programmfluss zu erhalten.
-
Ja, aber probier es doch aus
Wobei natürlich die boolische Anordnung gilt (Bindungsordnung).bool bar(std::size_t i) { std::cout << i << std::endl; return true; } int main() { if (bar(1) && !bar(2) || !bar(3)) std::cout << "1, 2, 3" << std::endl; if (bar(1) || bar(2)) std::cout << "1, 2" << std::endl; }...
-
Das ist mir klar
Die Frage ist eher, ob der Standard das so garantiert und ich bei Compilerwechsel meinen Code nicht ändern muss...
-
Welcher Teil des if() ist dir denn unklar?
C(89) kannte noch keinen eigenständigen bool-Typ, darum hat es alle Bool-Berechnungen mit Integern durchgeführt - 0 wird als false bewertet, jeder andere Wert als true (boolesche Operatoren (&&, ||, !) und Vergleiche liefern afaik 0 oder 1 zurück). Und dieses Verhalten wurde auch von C++ übernommen (aus Kompatibilität und weil "if(i)..." kürzer ist als "if(i!=0)...").