Wobei der Integer in dem Fall des Integers halt wirklich nicht initialisiert sein kann
und beim nichtvorhandenen ELSE zufällig sein kann.
Andersrum ist es schlimmer.
Per se ist der Result als String immer initialisiert, aber nicht in der Funktion, sondern beim Aufrufer, wo er dann z.B. in einer Schleife initial nicht '' sein kann.
Bei gemanagten Typen wird "intern" aus dem Result ein
OUT- VAR-Parameter und außerdem sind gemangte Typen immer mit "0" initialisiert. (WideString, LongString, Variant, dynamische Array, Interface und ordentlich geschriebene Custom-Managed-Records)
Delphi-Quellcode:
function Test(a: Boolean): String;
// wird zu
procedure Test(a: Boolean; var Result: String);
Wir hatten im XE einen Fall, wo sich der Compiler in einer Verschachtelung aus Try-Finally, Try-Except, If-Then-Else-If-Then-Else-If-Then-Else-... und Case mit Exit und Abort/Raise durcheinander kam
und nachfolgend meinte die lokale Integervariable könne uninitialisiert sein, drum wurde dort ein :=0 am Anfang eingefügt, was dann D10+ aber anders sah und richtig erkannte, dass bis zur Auswertung es in allen Pfaden gesetzt wird, oder es via Exit/Raise vorher rausspringt.
Im Windows64-Compiler gibt es jetzt teilweise Zustände, wo ein Boolean-Result immer automatisch initialisiert
ist scheint ... nja, wenn du schaust immmer, aber eigentlich fast immer, weil du zufällig den einen Abweichenden von Tausenden/Millionen Durchgängen nicht siehst.