Как связаны C++, goto и обезьяны

Судя по неожиданно бурной реакции некоторых пользователей DTF на мои предыдущие посты, они очень хотят защитить меня от применения goto в C++. И даже готовы ради этого меня побить, лишь бы не случилось немыслимое и в программах на C++ не появилось бы goto. Реальных аргументов в пользу того чтобы не учиться пользоваться goto они привести не в состоя…

Как связаны C++, goto и обезьяны
22

Я джун, пробую писать всякие интерпретаторы и среды разработки.
И у меня уже возникали моменты, когда без goto никак.

1
for(int i = 0; i < n; i++)
for(int i2 = 0; i2 < n; i2++)
Как выйти сразу из двух и более циклов? Иногда ломаю условие предыдущего цикла, т.е. i2 = n и i = n. Но, когда требуется максимальная производительность, приходится выходит с goto.

2
switch не даёт прыгать на свои кейсы из самого же switch, хотя они - самые обычные метки для прыжка. Это дикость.
Пришлось городить уродство:
switch(n)
case А:
case_а:
код
case Б:
код
case В:
код
goto case_а;
код
case Г...
При этом логика кода никак не давала поставить А ниже В, чтобы можно было просто провалится в него, я пытался.

3
Надо было определить что под курсором. А под ним может быть любой объект, каждый со своим массивом или структурой. Т.е. нельзя просто пройти по одному массиву/структуре.
Сначала перед каждым массивом/структурой стояло "if(объект_не_найден)", но требовалась производительность (поиск идёт всегда при движении курсора), поэтому проходим по всем и при нахождении просто прыгаем на выход, на конец всех поисков.

Ответить

4
while(true){
switch(n){
case А
case Б
...
}}
Когда кейсов мало, делаю if else вместо switch, чтобы break выводил из while.
Но если их много, то приходится использовать switch и goto, иначе код с кучей if else усложняется для понимания.

Ответить