for (...)
for (...)
{
break;
break; // 1
}
Будет ли выполняться код в (1)? Там также может быть там continue
или что-нибудь еще. Я знаю, я мог бы просто проверить мой отладчик но я хочу знать, что говорит об этом стандарт C ++, так как мой компилятор может быть просто особым случаем.
В соответствии с технические характеристики
6.6.1 Оператор перерыва [stmt.break]
Оператор break должен встречаться только в выражении итерации или в операторе switch и вызывает завершение
самого маленького вмещающего оператора итерации или оператора переключения; контроль переходит на утверждение
после прекращенного заявления, если таковые имеются.
следовательно 1 не должен даже достичь. Некоторые компиляторы Java могут даже пометить этот код недостижимый.
Согласно стандарту
Внутри вложенных операторов оператор break завершает оператор do, for, switch или while, который сразу же включает его.
Так что в вашем случае он всегда будет ломаться сначала и никогда не придет ко второму брейку.
Код в (1) не будет выполнен, break
означает выпрыгнуть из цикла, поэтому после первого разрыва код будет выпрыгивать из внутреннего цикла.
В этом конкретном цикле нет, никакой код после прерывания не будет выполнен, так как прерывание выпадет из этого цикла и продолжит выполнение после окончания внутреннего цикла for. Хотя любой код вне внутреннего цикла, который появляется после разрыва (во внешнем цикле), будет выполнен.
Нет, каждый раз, когда выполняется первый оператор break, внутренний цикл завершается, и второй оператор break никогда не будет достигнут.
Ты можешь видеть Вот.
И я уверен, что следующий перерыв никогда не превзойдет. Неважно, какой компилятор вы используете.
Нет. Выполнение кода выпрыгивает из внутреннего первого цикла в тот момент, когда возникает разрыв.
Даже если код такой
break;
continue;
break;
происходит то же самое. Continue — это просто способ сказать компилятору итерировать цикл, пропуская любой промежуточный код.