Почему это недействительно
for( int i = 0, int x = 0; some condition; ++i, ++x )
и это
int i, x;
for( i = 0, x = 0; some condition; ++i, ++x )
Спасибо
Почему это недействительно
for( int i = 0, int x = 0; some condition; ++i, ++x )
и это
int i, x;
for( i = 0, x = 0; some condition; ++i, ++x )
Спасибо
когда вам нужно объявить две переменные разных типов, это невозможно сделать с помощью одного объявления
Взлом хаки:
for (struct {int i; char c;} loop = {0, 'a'}; loop.i < 26; ++loop.i, ++loop.c)
{
std::cout << loop.c << '\n';
}
; -)
это работает:
for( int i = 0, x = 0; some condition; ++i, ++x )
он как объявление переменной:
int i, j; // correct
int i, int j; // wrong, must not repeat type
Почему это должно быть действительно? Это синтаксически бессмысленная конструкция. Что вы пытались сказать с ним?
Первая часть заголовка for
- это объявление.
int i = 0, int x = 0
не является допустимым объявлением. Он не будет компилироваться в for
по той же причине, почему он не будет компилировать нигде в программе
int i = 0, int x = 0; // Syntax error
Если вам нужно объявить два объекта типа int
в одном объявлении, сделайте следующее:
int i = 0, x = 0; // OK
То же самое можно использовать в for
for( int i = 0, x = 0; some condition; ++i, ++x )
(Но если вам нужно объявить две переменные разных типов, это не может быть сделано одним объявлением, и поэтому оба они не могут быть объявлены в for
одновременно. По крайней мере, один из них должен будет объявляется до for
.)
Правильная версия
for (int i = 0, x = 0; some condition; ++i, ++x)
Поскольку объявление переменной (например, int x
) не является выражением, а оператор запятой (,
) объединяет выражения.
Это законно:
for(int i = 0, x = 0; condition; ++i, ++x );
int x, int y не является законным способом объявления переменных;
Я применил этот подход для вычисления диагональной разницы. Здесь я вычисляю сумму антидиагональных.
for(int i=0,j=n-1; i<n,j>=0;i++,j--){
sum_right += a[i][j];
}