c++ - usando - ¿Puedo declarar variables de diferentes tipos en la inicialización de un ciclo for?
ejemplos usando while en c++ (5)
Lo que está prohibido es el final de un enunciado con una coma como lo haces en int a = 0, short ...
Si desea usar esta notación, entonces la variable muss tiene el mismo tipo int i = 0, s = 0;
Esta pregunta ya tiene una respuesta aquí:
¿Por qué este código de C ++ no se compila en VS2010?
for ( int a = 0, short b = 0; a < 10; ++a, ++b ) {}
mientras que este hace:
short b = 0;
for ( int a = 0; a < 10; ++a, ++b ) {}
¿Está prohibida la declaración de dos variables de diferentes tipos dentro del inicializador for-loop? Si es así, ¿cómo puedes evitarlo?
Nada que ver con el bucle for
. Esto tampoco se compila si escribe int a = 0, short b = 0;
fuera de cualquier bucle.
Entonces la respuesta es: siempre está prohibido declarar dos variables de diferentes tipos en una sola declaración.
Edit: Oh, para el pedante, me doy cuenta de que puede declarar un tipo base y un tipo de puntero en la misma instrucción, por ejemplo, un int y un puntero int, por lo que serían tipos diferentes, sí.
Hm, eso me hace pensar. En un entorno de 32 bits, un puntero sería de 4 bytes, al igual que un int, por lo que podría usar short a = 0, * b = 0; y luego lanzar b a un int. Hm ...
No puede declarar una variable en el estado while
del (el paso de comprobación).
for ( a = 0, short b = 0; a < 10; ++a, ++b ) {}
eso no es ninguno de los trabajos.
Sí, eso está prohibido. De la misma manera, no puede declarar variables de diferentes tipos en una declaración de declaración ( edit : módulo los modificadores de declaradores que menciona @MrLister). Puedes declarar las estructuras
for (struct { int a = 0; short b = 0; } d; d.a < 10; ++d.a, ++d.b ) {}
C ++ 03 código:
for (struct { int a; short b; } d = { 0, 0 }; d.a < 10; ++d.a, ++d.b ) {}
Por supuesto, cuando todos son 0
, puede omitir los inicializadores por completo y escribir = { }
.
Solo puede declarar un tipo para la declaración. Entonces el segundo código es utilizable.