Вы можете определить 2 переменные одного типа в цикле for:
int main() {
for (int i = 0, j = 0; i < 10; i += 1, j = 2*i) {
cout << j << endl;
}
}
Но нельзя определять переменные разных типов:
int main() {
for (int i = 0, float j = 0.0; i < 10; i += 1, j = 2*i) {
cout << j << endl;
}
}
Есть ли способ сделать это? (Мне не нужно использовать i
внутри цикла, просто j
.)
Если у вас есть полностью взломанное и неясное решение, это нормально для меня.
В этом надуманном примере я знаю, что вы можете просто использовать double
для обеих переменных. Я ищу общий ответ.
Пожалуйста, не предлагайте перемещать какие-либо переменные за пределы для тела, вероятно, для меня это невозможно, поскольку один из них - итератор, который должен исчезнуть сразу после цикла, а оператор for должен быть включен в мой макрос foreach
:
#define foreach(var, iter, instr) { \
typeof(iter) var##IT = iter; \
typeof(iter)::Element var = *var##IT; \
for (; var##_iterIT.is_still_ok(); ++var##IT, var = *var#IT) { \
instr; \
} \
}
Может использоваться таким образом:
foreach(ii, collection, {
cout << ii;
}).
Но мне нужно что-то, что будет использоваться так:
foreach(ii, collection)
cout << ii;
Пожалуйста, не вносите никаких накладных расходов во время выполнения (но это может быть медленным при компиляции).