I cicli e le altre strutture di flow control della programmazione strutturata/procedurale/ad oggetti consentono di evitare il goto credo nella totalità dei casi. Non mi è mai capitato di aver bisogno di un goto in tutto il codice che ho mai scritto (principalmente C++, VB.NET, C#); può forse essere utile in alcuni rarissimi casi in alcuni linguaggi per la gestione degli errori, ma ci sono metodi migliori (e in quasi tutti i linguaggi di livello superiore si può evitare anche in questo frangente).
Il discorso del "a livello macchina sono tutti goto" è una sciocchezza, tutto a livello macchina è istruzioni elementari, ma non per questo scriviamo in assembly.
Inoltre i cicli servono, oltre ad effettuare una determinata azione, rendono immediatamente chiaro al lettore del codice (se sono usati adeguatamente) qual è il senso del codice stesso; credo anche che i compilatori riescano a prendere in maniera più semplice decisioni in termini di prestazioni partendo da codice strutturato piuttosto che da spaghetti-code pieno di goto.
Originariamente inviato da shodan
il goto (a causa del salto) non fa chiamare i distruttori degli oggetti che manda fuori scope.
Urca, questo non lo sapevo, motivo in più per starne alla larga.