Genau das.
Delphi kann hier nicht "prüfen", ob in dem Funktionsaufruf etwas verändert wird ... grundsätzlich kann das passieren, also ist es standardmäßig aus.
PS: Einmal ohne Debugger ausführen
und dann nochmal im Debugger (Haltpunkt + F8), mit DoCount in den überwachten Ausdrücken (Mal mit und mal ohne Seiteneffekte).
Delphi-Quellcode:
type
TForm1 = class(TForm)
...
procedure FormCreate(Sender: TObject);
private
FCount: Integer;
function DoCount: Integer;
end;
function TForm1.DoCount: Integer;
begin
Inc(FCount);
Result := FCount;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
FCount := 0; // <<< Haltepunkt und dann weiter mit F8
ShowMessage(IntToStr(DoCount));
ShowMessage(IntToStr(DoCount));
ShowMessage(IntToStr(DoCount));
end;