Stell dir vor StrToIntDef etc. würden mit Exceptions arbeiten, und durch abfangen dieser das Ergebnis zurück liefern. Man hätte ganz viel Spaß beim debuggen und langamer wäre das ganze auch.
StrToIntDef ist ein schlechtes Beispiel, da diese Funktion immer definiert ist und "nicht" scheitern kann (alle möglichen Argumente sind gültig, nicht böses zu tun).
Wenn du dir StrToInt anguckst, wirst du eine
Exception bekommen, wenn du irgendwas merkwürdiges Konvertieren willst.
In beiden Fällen gibt es keine Fehlerrückgabewerte (es sei denn man missbraucht IntToStrDef dazu, indem man einen ungewöhnlichen Defaultwert angibt).
Die Diskussion mit der Geschwindigkeit gab es hier auch schon mal, dabei kam afaik heraus, dass Try-Except wenig kostet, solange keine Exceptions auftreten (dann ist eh was falsch gelaufen).