oder "Deklarieren von mehreren Variablen in einem for-Schleife ist verboten",In C++, warum kann ich nicht schreiben, eine für() Schleife wie folgt: for (int i = 1, Doppel i2 = 0;
?! Mein ursprünglicher Code
for(int i = 1, int i2 = 1;
i2 < mid;
i++, i2 = i * i) {
war ich eine Schleife durch die ersten so viele Plätze wollte, und beide wollte die Zahl und ihr Quadrat, und die Stoppbedingung auf dem Platz abhing. Dieser Code scheint der sauberste Ausdruck zu sein Absicht, aber es ist ungültig.Ich kann mir ein Dutzend Möglichkeiten vorstellen, um dies zu umgehen, also bin ich nicht auf der Suche nach der besten Alternative, aber für ein tieferes Verständnis, warum das ungültig ist.Ein bisschen Sprachgesetzgebung, wenn Sie so wollen.
Ich bin alt genug, um zu merken, wenn Sie zu Beginn der Funktion aller Variablen zu erklären haben, so dass ich zu schätzen die
for(int i = 0; ....
Syntax. Um es zu lesen sieht es so aus, als ob Sie nur eine Typdeklaration im ersten Abschnitt einer for() -Anweisung haben können. So können Sie tun
for(int i=0, j=0; ...
oder sogar leicht barock
for(int i=0, *j=&i; ...
aber nicht die zu Mein vernünftig
for(int i=0, double x=0.0; ...
Weiß jemand, warum? Ist das eine Einschränkung von for()? Oder eine Beschränkung Komma-Listen, wie „das erste Element einer Kommaliste kann einen Typen deklarieren, aber nicht die andere? Ist die folgenden Verwendungen von Kommata getrennte syntaktischen Elemente von C++?
(A)
for(int i=0, j=0; ...
(B)
int i = 0, j = 0;
(C)
int z;
z = 1, 3, 4;
Alle da draußen Gurus?
============================================== ======
Aufgrund der guten Antworten, die ich bekommen habe, ich glaube, ich die Frage schärfen:
In einer for-Anweisung
for(X; Y; Z;) {..... }
was sind X, Y und Z ?
Meine Frage war über C++, aber ich habe keine großartige C++ Referenz. In meiner C-Referenz (Harbison und Steele 4. Auflage, 1995), sie sind alle drei Ausdrücke, und mein gcc erfordert C99-Modus zu verwenden (int i = 0;
In Stroustrup, sec 6.3 wird die für Anweisung Syntax als
gegebenfür (für-init-Anweisung, Bedingung; expression) Aussagen
So hat C++ eine besondere syntaktische Anweisung an die erste Klausel gewidmet in für(), und wir können nehme an, dass sie spezielle Regeln haben, die über die für einen Ausdruck hinausgehen. Klingt das gut?
mögliche Duplikate von [Mehrere Zähler Problem In For-Schleife] (http://StackOverflow.com/Questions/2340073/Multiple-Counter-Problem-in-For-Loop) –
mögliche Duplikate von [Kann ich Variablen von verschiedenen deklarieren Typen bei der Initialisierung einer for-Schleife?] (http://stackoverflow.com/questions/8644707/cani-i-declare-variables-of-different-types-in-the-initialization-of-a-for-loop) –