Проблема с несколькими счетчиками в цикле - PullRequest
21 голосов
/ 26 февраля 2010

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

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

а это

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

Спасибо

Ответы [ 7 ]

37 голосов
/ 26 февраля 2010

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

Взломать взломать взломать:

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

; -)

33 голосов
/ 26 февраля 2010

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

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

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

int i, j; // correct
int i, int j; // wrong, must not repeat type
8 голосов
/ 26 февраля 2010

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

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

7 голосов
/ 26 февраля 2010

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

for (int i = 0, x = 0; some condition; ++i, ++x)
3 голосов
/ 26 февраля 2010

Это законно:

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

int x, int y - недопустимый способ объявления переменных;

3 голосов
/ 26 февраля 2010

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

0 голосов
/ 27 июля 2016

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

 for(int i=0,j=n-1; i<n,j>=0;i++,j--){
    sum_right += a[i][j];
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...