Frage

Ich habe eine einfache Frage, die ich vor allem für meine curiousity bin aufwirft.

Was sind die Unterschiede zwischen diesen beiden Zeilen Code? (In C ++)

for(int i = 0; i < N, N > 0; i++)

for(int i = 0; i < N && N > 0; i++)

Die Auswahl der Bedingungen ist völlig willkürlich, ich bin nur daran interessiert, die Unterschiede zwischen und &&.

Ich bin kein Anfänger mit allen Mitteln zu Codierung, aber ich habe noch nie mit dem Komma-Operator gestört.

Gibt es Performance / Verhalten Unterschiede oder ist es rein ästhetischen?

Eine letzte Anmerkung, ich weiß, dass es größere Leistung Fisch als ein Bedingungsoperator zu braten, aber ich bin nur neugierig. Verwöhnen Sie mich.

Bearbeiten Vielen Dank für Ihre Antworten.

Es stellt sich den Code aus, dass diese Frage aufgefordert, den Komma-Operator in der Art und Weise missbraucht hatte ich beschrieben habe. Ich fragte mich, was der Unterschied war und warum es kein Operator && war, aber es war einfach falsch geschrieben. Ich habe mir nichts daran falsch war, weil es einfach gut gearbeitet. Vielen Dank für die Begradigung mich.

War es hilfreich?

Lösung

Obwohl es sieht aus wie es,

for(int i = 0; i < N, N > 0; i++)

und

for(int i = 0; i < N && N > 0; i++) 

nicht gleichwertig sind.

Hier ist der Beweis.

int main(int argc, char* argv[])
{
  int N = 10;
  int i = 5;

  int val = (N, i);
  cout << val << endl;
}

Ergebnis:

5

Was bedeutet, dass die bei der Bestimmung, wenn die Schleife verlassen wird es N > 0 verwenden. Wenn N = 10, bedeutet dies, dass es immer wahr sein wird, und die Schleife wird nie verlassen.

Führen Sie diese und den Beweis sehen.

int main(int argc, char* argv[])
{
  int N = 10;
  int i = 5;

  for(int i = 0; i < N, N > 0; i++){
     cout << val << endl;
  }
}

bash-2.05$ ./a.out                  
0                                   
1                                   
2                                   
3                                   
4                                   
5                                   
6                                   
7                                   
8                                   
9                                   
10                                  
11                                  
...
142
143
144
145
146
147
148
^C

Wenn N eine Konstante oder eine Variable ist, die nicht innerhalb der Schleife ändert dann könnte man einfach die N > 0 Prüfung entfernen, indem es einmal erste Überprüfung, d.

if (N > 0){
  for (int i = 0; i < N; i++)
   ...
}

Andere Tipps

ein Komma wie die Verwendung wird einfach verwirft die erste Bedingung .

Der Komma-Operator bedeutet „diese Aussagen in dieser Reihenfolge ausgeführt werden, und nimmt den Wert des letzten“.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top