Вот что я хотел бы сделать:
{
...
if(condition)
break;
...
}
Это работает для цикла. Я хотел бы что-то подобное для простого блока кода.
Является ли это возможным?
Я вынужден использовать «goto»?
Я думаю, что такое расширение break
заявление было бы полезным дополнением к C ++ 11 …
Как насчет
do
{
...
if(condition)
break;
...
}
while (0);
Мне не особенно нравится этот стиль, но я видел его раньше. Если о рефакторинге не может быть и речи (это может быть для массивного блока, который может разбить много вещей при изменении), это вариант.
Вот этот:
{
// ...
if (!condition)
{
// ...
}
}
Это позволит избежать goto
выпрыгнуть из блока кода.
Вот один из способов:
switch(0) {
default:
/* code */
if (cond) break;
/* code */
}
(пожалуйста, никогда не делай этого)
Вот только некоторые дополнительные возможности:
for(..)
{
continue;//next loop iteration
}
void mymethod()
{
...
return;
...
}
Вероятно, вы должны создать суб-методы для проблемного блока кода, если вы хотите использовать goto, и оставить блок кода с помощью return.
В C ++ 11 лучший способ добиться этого — использовать анонимная лямбда-функция и замена break
с return
[&](){
...
if(condition)
return;
...
}();
Обратите внимание, что [&]
захватывает все переменные по ссылке, если вы их не используете, просто замените их []
«Я хотел бы что-то подобное для простого блока кода».
использование return
после того, как условие выполнено, и return
контроль обратно к абоненту.
void MyWorkerClass::doWork(Item & workItem) {
// ...
if(noMoreWorkToDo)
return;
// ...
}