Użycie goto w C i C++ jest bardzo nieestetyczne i niepotrzebne.
Nie używa się ich już na pewno pomiędzy funkcjami z prostej przyczyny:
Kiedy funkcja jest generowana w pamięci, tworzony jest stos ze zmienymi, zajmuje to pewien obszar pamięci i jest wygodne do użycia dla procesora. Funkcja zwracając wynik, lub kończąc pracę kiedy jest typu void usuwa jednocześnie wcześniej utworzony stos i zwraca do ogólnej póli zasobów wcześniej używaną pamięć.
Kiedy próbujesz wyjść z funkcji przed zakończeniem jej pracy, stos nie soztaje usunięty i zajmuje choć z pozoru niewielką ilość pamięci, to po kilku tysiącach wywołań zaczyna sprawiać problemy. Realne stają się wówczas przekroczenie stosu i awaria programu.
Z tego powodu istnieje wiele ułatwień, jak polecenia break i continue.
Przykład:
for (int i=0;i<10;i++){
if (i==5) continue;
if (i==8) break;
std::cout << i << " Na pewno nie jest piatka!"<<std::endl;
}
W tym przypadku na ekranie konsoli wyświetlą Ci się liczby 0, 1, 2, 3, 4, 6, 7.
Ponieważ gdy zostanie wywołane polecenie continue, pętla pominie zawarty poniżej kod i zacznie kolejny krok,
a polecenie break zakończy działanie pętli niezależnie od tego czy warunki końcowe zostały spełnione czy nie.
I niestety wszystkie warunki wywoływania funkcji, powinny być zawarte w funkcji int main(), lub w innych funkcjach, nie jest możliwe by przejść do środka niewywołanej funkcji, ani nie jest dobrym pomysłem wychodzić z niej przy pomocy goto.