考虑以下代码:
program Project11;
{$APPTYPE CONSOLE}
uses
SysUtils;
function Test: string;
var
r, s: string;
begin
r := 'Hello';
Writeln(Format('%.8x', [NativeInt(Pointer(r))]));
s := r;
Writeln(Format('%.8x', [NativeInt(Pointer(s))]));
Result := r;
Writeln(Format('%.8x', [NativeInt(Pointer(Result))]));
end;
var
S1: string;
begin
try
S1:= Test;
Writeln(Format('%.8x', [NativeInt(Pointer(S1))]));
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
Readln;
end.
在Delphi XE上运行时,我得到了
0040F358
0040F358
020A28CC
020A28CC
问题:为什么编译器在为函数的结果分配本地字符串变量时会进行深层复制?