Warum kann ich While (1) in C # nicht verwenden?

8

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?

    
anon 24.07.2010, 15:15
quelle

5 Antworten

20

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.

    
danben 24.07.2010, 15:17
quelle
8
  

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.

    
Rob 24.07.2010 15:18
quelle
4

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).

    
nlawalker 24.07.2010 15:19
quelle
1

wenn 0 ist false dann welche sollte wahr sein, 1 oder -1 ? Der erste ist, was als richtig angenommen wird, aber der zweite actully hat alle seine Bits gesetzt und ist gleich ~0 (nicht falsch).

    
ja72 24.07.2010 15:20
quelle
1

Erzwingt eine boolesche Auswertung. Ähnlich, um die Zuweisung in der Bedingung if von der Bereitstellung eines booleschen Werts zu schützen.

%Vor%

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":

%Vor%     
davbryn 24.07.2010 15:29
quelle

Tags und Links