Что разрешено в заголовке цикла for? - PullRequest
2 голосов
/ 09 декабря 2010

В C # я видел странную и сложную логику в заголовках циклов.

Что является / не возможно в заголовке цикла for? Можно ли иметь более одного инкремента / переменной?

Спасибо

Ответы [ 2 ]

8 голосов
/ 09 декабря 2010

Возможно ли иметь более одного инкремента / переменную?

Да, это возможно. То есть это совершенно законно:

// reverse b into a
for (int i = 0, j = n - 1; i < n; i++, j--) {
    a[i] = b[j]
}

Что является / не возможно в заголовке for цикла?

Это именно то, что вам скажет грамматика. Вот грамматика для оператора for в C #:

for-statement:
    for(for-initializer_opt; for-condition_opt; for-iterator_opt)
        embedded-statement
for-initializer:
    local-variable-declaration
    statement-expression-list
for-condition:
    boolean-expression
for-iterator:
    statement-expression-list
statement-expression-list:
    statement-expression
    statement-expression-list, statement-expression

Обратите внимание, что и for-initializer, и for-iterator допускают составные операторы через statement-expression-list. См. §8.8.3 спецификации языка для дополнительной информации. Вы, вероятно, также захотите посетить §8.5.1 спецификации, чтобы точно узнать, что влечет за собой local-variable-declaration (подсказка: int i = 0, j = n - 1, k = 42 допустимо, а int i = 0, j = n - 1, long k = 42 - нет).

2 голосов
/ 09 декабря 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...