¿Puedo declarar variables de diferentes tipos en la inicialización de un ciclo for?

¿Por qué este código de C ++ no se comstack 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 statement de dos variables de diferentes tipos dentro del inicializador for-loop? Si es así, ¿cómo puedes evitarlo?

Sí, eso está prohibido. De la misma manera, no puede declarar variables de diferentes tipos en una statement de statement ( edit : módulo los modificadores de declaradores que menciona @MrLister). Puedes declarar las estructuras

 for (struct { int a = 0; short b = 0; } d; da < 10; ++da, ++db ) {} 

C ++ 03 código:

 for (struct { int a; short b; } d = { 0, 0 }; da < 10; ++da, ++db ) {} 

Por supuesto, cuando todos son 0 , puede omitir los inicializadores por completo y escribir = { } .

Nada que ver con el bucle for . Esto tampoco se comstack 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 statement.

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 …

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;

Solo puede declarar un tipo para la statement. Entonces el segundo código es utilizable.

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.