This question already has an answer here:
Why does this C++ code not compile under VS2010:
for ( int a = 0, short b = 0; a < 10; ++a, ++b ) {}
while this one does:
short b = 0;
for ( int a = 0; a < 10; ++a, ++b ) {}
Is the declaration of two variables of different types inside the for-loop initializer prohibited? If so, how can you work around it?
Nothing to do with the
for
loop. This also doesn't compile if you writeint a = 0, short b = 0;
outside of any loop.So the answer is: it is always forbidden to declare two variables of different types in a single statement.
Edit: Oh, for the pedantic, I do realise that you can declare a base type and a pointer type in the same statement, for instance an int and an int pointer, so those would be different types, yes.
Hm, that makes me think. In a 32 bit environment, a pointer would be 4 bytes, just like an int, so you could use short a = 0, *b = 0; and then cast b to an int. Hm...
You can only declare one type in for statement. So the second code is the usable one.
Yes, that is prohibited. Just as otherwise you cannot declare variables of differing types in one declaration statement (edit: modulo the declarator modifiers that @MrLister mentions). You can declare structs
C++03 code:
Of course when all are
0
, you can omit the initializers altogether and write= { }
.You can't declare a variable into the
while
condition of thefor
(the comprobation step).that's neither works.
What is prohibited is the ending of a statement with a comma as you do in
int a = 0, short ...
If you want to use this notation then bothe variable muss have the same type
int i = 0, s = 0;