Подтвердить что ты не робот

Проблема с несколькими счетчиками для цикла

Почему это недействительно

for( int i = 0, int x = 0; some condition; ++i, ++x )

и это

int i, x;
for( i = 0, x = 0; some condition; ++i, ++x )

Спасибо

4b9b3361

Ответ 1

когда вам нужно объявить две переменные разных типов, это невозможно сделать с помощью одного объявления

Взлом хаки:

for (struct {int i; char c;} loop = {0, 'a'}; loop.i < 26; ++loop.i, ++loop.c)
{
    std::cout << loop.c << '\n';
}

; -)

Ответ 2

это работает:

for( int i = 0, x = 0; some condition; ++i, ++x )

он как объявление переменной:

int i, j; // correct
int i, int j; // wrong, must not repeat type

Ответ 3

Почему это должно быть действительно? Это синтаксически бессмысленная конструкция. Что вы пытались сказать с ним?

Первая часть заголовка 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.)

Ответ 4

Правильная версия

for (int i = 0, x = 0; some condition; ++i, ++x)

Ответ 5

Поскольку объявление переменной (например, int x) не является выражением, а оператор запятой (,) объединяет выражения.

Ответ 6

Это законно:

    for(int i = 0, x = 0; condition; ++i, ++x );

int x, int y не является законным способом объявления переменных;

Ответ 7

Я применил этот подход для вычисления диагональной разницы. Здесь я вычисляю сумму антидиагональных.

 for(int i=0,j=n-1; i<n,j>=0;i++,j--){
    sum_right += a[i][j];
  }