Какова область действия цикла for без скобок в C ++ - PullRequest
0 голосов
/ 26 декабря 2018

Я понимаю, что {...} вводит новую область видимости, поэтому следующее не будет работать:

for(int i = 0; i < 10; i++) {
    // Do something...
}

cout << i << endl;  // Error: i is not defined in this scope

Однако я получаю ту же ошибку, когда пытаюсь сделать то же самое без фигурных скобок.

for (int i = 0; i < 10; i++) continue;
cout << i << endl;  // Same error, not sure why

Я ожидал, что i будет определено во втором примере, потому что нет {...} для введения новой области.

Ответы [ 2 ]

0 голосов
/ 26 декабря 2018

Любая управляющая структура (if, for, while и т. Д.) Без фигурных скобок применяется только к следующему оператору .Второй пример эквивалентен следующему:

for (int i = 0; i < 10; i++) {
    continue;
}
cout << i << endl;

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

0 голосов
/ 26 декабря 2018

Область видимости i - это тело for().

for (int i = 0; i < 10; i++) continue;

эквивалентно

for (int i = 0; i < 10; i++) { continue; }

Если фигурные скобки опущены, телоэто просто оператор, следующий за заголовком цикла for().

...