Могу ли я объявлять переменные разных типов при инициализации цикла for?
Почему этот код С++ не компилируется под VS2010:
for ( int a = 0, short b = 0; a < 10; ++a, ++b ) {}
в то время как это делает:
short b = 0;
for ( int a = 0; a < 10; ++a, ++b ) {}
Запрещено ли объявление двух переменных разных типов внутри инициализатора for-loop? Если да, то как вы можете обойти это?
Ответы
Ответ 1
Да, это запрещено. Так же, как иначе вы не можете объявлять переменные разных типов в одном объявлении (изменить: modulo модификаторы декларатора, о которых упоминает @MrLister). Вы можете объявлять структуры
for (struct { int a = 0; short b = 0; } d; d.a < 10; ++d.a, ++d.b ) {}
Код С++ 03:
for (struct { int a; short b; } d = { 0, 0 }; d.a < 10; ++d.a, ++d.b ) {}
Конечно, если все 0
, вы можете полностью опустить инициализаторы и написать = { }
.
Ответ 2
Ничего общего с циклом for
. Это также не компилируется, если вы пишете int a = 0, short b = 0;
вне любого цикла.
Таким образом, ответ таков: всегда запрещено объявлять две переменные разных типов в одном утверждении.
Edit: О, для педантичного я понимаю, что вы можете объявить базовый тип и тип указателя в том же самом операторе, например int и int pointer, так что это будут разные типы, да.
Хм, это заставляет меня думать. В 32-битной среде указатель будет 4 байта, как и int, поэтому вы можете использовать короткие a = 0, * b = 0; а затем отбрасывает b в int. Хм...
Ответ 3
То, что запрещено, - это конец инструкции с запятой, как в int a = 0, short ...
Если вы хотите использовать это обозначение, то bothe variable muss имеют один и тот же тип int i = 0, s = 0;
Ответ 4
Вы можете объявить только один оператор for for. Таким образом, второй код является полезным.
Ответ 5
Вы не можете объявить переменную в while
условие for
(шаг сборки).
for ( a = 0, short b = 0; a < 10; ++a, ++b ) {}
который не работает.