Как выпрыгнуть из блока кода C ++?

Вот что я хотел бы сделать:

{
...
if(condition)
break;
...
}

Это работает для цикла. Я хотел бы что-то подобное для простого блока кода.
Является ли это возможным?
Я вынужден использовать «goto»?


Я думаю, что такое расширение break заявление было бы полезным дополнением к C ++ 11 …

8

Решение

Как насчет

do
{
...
if(condition)
break;
...
}
while (0);

Мне не особенно нравится этот стиль, но я видел его раньше. Если о рефакторинге не может быть и речи (это может быть для массивного блока, который может разбить много вещей при изменении), это вариант.

4

Другие решения

Вот этот:

{
// ...

if (!condition)
{
// ...
}
}

Это позволит избежать goto выпрыгнуть из блока кода.

4

Вот один из способов:

switch(0) {
default:
/* code */
if (cond) break;
/* code */
}

(пожалуйста, никогда не делай этого)

4

Вот только некоторые дополнительные возможности:

for(..)
{
continue;//next loop iteration
}

void mymethod()
{
...
return;
...
}

Вероятно, вы должны создать суб-методы для проблемного блока кода, если вы хотите использовать goto, и оставить блок кода с помощью return.

3

В C ++ 11 лучший способ добиться этого — использовать анонимная лямбда-функция и замена break с return

[&](){
...
if(condition)
return;
...
}();

Обратите внимание, что [&] захватывает все переменные по ссылке, если вы их не используете, просто замените их []

3

«Я хотел бы что-то подобное для простого блока кода».

использование return после того, как условие выполнено, и return контроль обратно к абоненту.

void MyWorkerClass::doWork(Item & workItem) {
// ...
if(noMoreWorkToDo)
return;
// ...
}
-1
По вопросам рекламы [email protected]