Как мы все знаем, не так просто прервать
из вложенного цикла из внешнего цикла без одного:
goto
( Пример кода. ) break
ing ( Пример кода. ) Хотя, согласитесь, все это довольно неуклюже. Особенно в версии функции отсутствует из-за отсутствия контекста, в котором вызываются циклы, так как вам нужно будет передать все, что вам нужно в циклах в качестве параметров.
Кроме того, второй становится хуже для каждого вложенного цикла.
Итак, я лично по-прежнему считаю версию goto
самой чистой.
Теперь, думая обо всем C ++ 0x и т. Д., Третий вариант подсказал мне идею использования лямбда-выражений:
#include
bool CheckCondition(){
return true;
}
bool CheckOtherCondition(){
return false;
}
int main(){
[&]{while(CheckCondition()){
for(;;){
if(!CheckOtherCondition())
return;
// do stuff...
}
// do stuff...
}}();
std::cout << "yep, broke out of it\n";
}
Это обеспечивает семантическую красоту простого return
, который предлагает третий вариант, не страдая от проблем контекста и будучи (почти) таким же чистым, как версия goto
. Кроме того, он даже короче (по символам), чем любой из вышеперечисленных вариантов.
Теперь я научился сдерживать радость после того, как нашел красивые (ab) варианты использования языка, потому что почти всегда есть какие-то недостатки. Есть ли на этом? Или есть еще лучший подход к проблеме?