这就是我想做的事情:
{
...
if(condition)
break;
...
}
这适用于循环。对于一个简单的代码块,我想要类似的东西。
有可能吗?
我被迫使用" goto"?
我认为break
语句的这种扩展对C ++ 11来说是一个有用的补充......
答案 0 :(得分:4)
怎么样
do
{
...
if(condition)
break;
...
}
while (0);
我不是特别喜欢这种风格,但我以前见过它。如果重构是不可能的(可能是一个巨大的块,如果更改可以打破很多东西),这是一个选项。
答案 1 :(得分:4)
这一个:
{
// ...
if (!condition)
{
// ...
}
}
这将避免goto
跳出一段代码。
答案 2 :(得分:4)
这是一种方式:
switch(0) {
default:
/* code */
if (cond) break;
/* code */
}
(请不要这样做)
答案 3 :(得分:3)
这里还有一些其他的可能性:
for(..)
{
continue;//next loop iteration
}
void mymethod()
{
...
return;
...
}
你可能应该为有问题的代码块创建子方法,如果你想使用goto并通过return的使用留下代码块。
答案 4 :(得分:3)
在 C ++ 11 中,实现此目的的最佳方法是使用匿名lambda函数并将break
替换为return
[&](){
...
if(condition)
return;
...
}();
请注意,[&]
会通过引用捕获所有变量,如果您不使用任何变量,只需将其替换为[]
答案 5 :(得分:1)
恐怕我现在正在释放编码神的怒气,但是这个不错的讨厌的宏可以帮助人们比以前更轻松地做到这一点(基于@jleahy的回答):
//example use:
// { __breakable__
// ...
// if (condition)
// break;
// ...
// if (condition2)
// break;
// ...
// }
//WARNING: use only with a standalone block. To make if, try or catch block
// breakable use double braces
// if (cond) {{ __breakable__ ... }}
// try {{ __breakable__ ... }} catch (...) {{ __breakable__ ... }}
#define __breakable__ }switch(0){default:
答案 6 :(得分:-1)
"对于一个简单的代码块,我想要类似的东西。"
在满足条件后使用return
,并return
控制回来。
void MyWorkerClass::doWork(Item & workItem) {
// ...
if(noMoreWorkToDo)
return;
// ...
}