Ich weiß, das ist wahrscheinlich schon irgendwo beantwortet worden, ich kann es einfach nicht finden. Warum erlaubt mir C #% while(1)
nicht zu verwenden? Ich weiß, dass es in C # keine Konvertierung zwischen dem Bool-Typ und anderen Typen gibt, aber warum? Was sind die Gründe dafür, wenn es in C ++ absolut akzeptabel ist?
Es soll verhindern, dass Programmierer versehentlich etwas tun, was sie nicht tun wollten.
Betrachten Sie diese allgemeine Fallstricke in C / C ++:
%Vor% Dies wird kompiliert und ausgeführt, führt aber zu unerwarteten Ergebnissen (der Programmierer wollte wahrscheinlich überprüfen, dass x
gleich 10
ist, nicht x
zuweisen - sonst, warum würde er den Test überhaupt brauchen? Es wird bewerte immer true
).
Indem Sie erzwingen, dass die Bedingungen vom Booleschen Typ sind, vermeiden Sie dieses Problem.
Was sind die Gründe dafür, wenn C ++ ist vollkommen akzeptabel.
Weil C # nicht C ++ ist. Die Sprachen haben eine ähnliche Syntax, sind aber unterschiedlich. C # ist kein Nachfolger von C ++, es ist eine völlig neue Sprache.
Ich weiß, dass es keine Konvertierung gibt zwischen dem Bool-Typ und anderen Arten in c # aber warum?
Warum sollte es sein? Es gibt keine logische Konvertierung, die ich mir zwischen einer Ganzzahl und einem booleschen Wert vorstellen kann.
Warum erlaubt mir c # nicht while (1) zu benutzen?
Gibt es wirklich etwas falsches an der Verwendung von while(true)
? =) Bei einer etwas ernsteren Bemerkung sagt while(...)
im Grunde: "Während die in den Klammern beschriebene Bedingung wahr ist, führe die folgende (n) Aktion (en) durch". Es gibt wirklich keine logische Möglichkeit für den C # -Compiler, 1 in entweder true oder false zu konvertieren. Daher können Sie ihn nicht verwenden.
Sie haben Ihre Frage selbst beantwortet: "Es gibt keine Konvertierung zwischen dem Bool-Typ und anderen Typen." Der C # -Compiler führt dies durch, um Korrektheit zu erzwingen und häufige Fehler zu vermeiden, wie einen Zuweisungsausdruck innerhalb einer Weile zu setzen, der immer als wahr ausgewertet wird (indem ein Gleichheitszeichen anstelle von zwei verwendet wird).
Erzwingt eine boolesche Auswertung. Ähnlich, um die Zuweisung in der Bedingung if
von der Bereitstellung eines booleschen Werts zu schützen.
Diese Zuweisung wird in dem Sinne ausgewertet, dass "x x y zugewiesen wurde" - im Gegensatz zu "ist x gleich y" - nicht das, was der Programmierer wahrscheinlich beabsichtigt hat.
Wenn Sie eine unendliche Schleifenbedingung wollen, us while(true)
; Wenn Sie eine Schleife ausführen möchten, während eine Variable ein bestimmter Wert ist, setzen Sie Bool vor der Schleife auf "True":
Tags und Links c#