Posso dichiarare variabili di tipi diversi nell’inizializzazione di un ciclo for?

Perché questo codice C ++ non viene compilato con VS2010:

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

mentre questo fa:

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

È vietata la dichiarazione di due variabili di tipi diversi all’interno del inizializzatore del ciclo? Se è così, come si può aggirare?

Sì, è proibito. Altrimenti non è ansible dichiarare variabili di tipi diversi in una dichiarazione di dichiarazione ( modifica : modulo i modificatori dichiaratore menzionati da @MrLister). Puoi dichiarare le strutture

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

Codice C ++ 03:

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

Ovviamente quando tutti sono 0 , puoi omettere gli inizializzatori del tutto e scrivere = { } .

Niente a che vedere con il ciclo for . Anche questo non si compila se scrivi int a = 0, short b = 0; al di fuori di qualsiasi loop.
Quindi la risposta è: è sempre vietato dichiarare due variabili di diverso tipo in una singola affermazione.

Edit: Oh, per il pedante, mi rendo conto che è ansible dichiarare un tipo di base e un tipo di puntatore nella stessa istruzione, ad esempio un int e un puntatore int, quindi quelli sarebbero di tipo diverso, sì.
Hm, questo mi fa pensare. In un ambiente a 32 bit, un puntatore sarebbe 4 byte, proprio come un int, quindi potresti usare short a = 0, * b = 0; e quindi b per un int. Hm …

Ciò che è proibito è la desinenza di un’istruzione con una virgola come si fa in int a = 0, short ...

Se vuoi usare questa notazione, allora la variabile muss ha lo stesso tipo int i = 0, s = 0;

È ansible dichiarare un solo tipo per dichiarazione. Quindi il secondo codice è quello utilizzabile.

Non è ansible dichiarare una variabile nella condizione while del for (il passo di comprobation).

 for ( a = 0, short b = 0; a < 10; ++a, ++b ) {} 

non è né opere.