o "Declarar múltiples variables en una de ist bucle verboten"En C++ Por qué no puedo escribir un bucle for() así: for (int i = 1, doble i2 = 0;
?! mi código original era
for(int i = 1, int i2 = 1;
i2 < mid;
i++, i2 = i * i) {
quería colocar a través de los primeros tan muchas plazas, y quería tanto el número y su cuadrado, y la parada de la condición depende de la plaza. Este código parece ser la expresión más limpio de intento, pero no es válido. Puedo pensar en una docena de formas de evitar esto, así que no estoy buscando la mejor alternativa, sino una comprensión más profunda de por qué esto no es válido. Un poco de abogacía lingüística, si se quiere.
Soy lo suficientemente viejo para recordar cuando había que declarar todas las variables al comienzo de la función, así que aprecio la sintaxis
for(int i = 0; ....
. Al leer todo, parece que solo se puede tener una declaración de tipo en la primera sección de una declaración for(). Lo que puede hacer
for(int i=0, j=0; ...
o incluso ligeramente el barroco
for(int i=0, *j=&i; ...
pero no la a-me-sensata
for(int i=0, double x=0.0; ...
¿Alguien sabe por qué? ¿Es esto una limitación de for()? O una restricción en las listas por comas, como "el primer elemento de una lista separada puede declarar un tipo, pero no a los otros? ¿Son los siguientes usos de comas elementos sintácticos distintos de C++?
(A)
for(int i=0, j=0; ...
(B)
int i = 0, j = 0;
(C)
int z;
z = 1, 3, 4;
Cualquier gurús por ahí?
============================================== ======
sobre la base de las buenas respuestas que he recibido, creo que puedo afilar la pregunta: ¿
en una sentencia for
for(X; Y; Z;) {..... }
cuáles son X, y y Z ?
Mi pregunta era sobre C++, pero no tengo una gran referencia de C++. En mi referencia C (Harbison y Steele cuarta ed, 1995), que son los tres expresiones, y mi gcc requiere modo C99 a utilizar para (int i = 0;
En Stroustrup, sec 6.3, el de sintaxis de la sentencia se da como
para (para-init-afirmación; condición; expresión) declaraciones
Así C++ tiene una declaración sintáctica especial dedicado a la primera cláusula en para(), y podemos supongamos que tienen reglas especiales más allá de las de una expresión. ¿Suena esto válido?
posible duplicado de [Problema de contador múltiple en For Loop] (http://stackoverflow.com/questions/2340073/multiple-counter-problem-in-for-loop) –
posible duplicado de [¿Puedo declarar variables de diferente tipos en la inicialización de un bucle for?] (http://stackoverflow.com/questions/8644707/can-i-declare-variables-of-different-types-in-the-initialization-of-a-for-loop) –