Delphi中返回类型为string的函数的一个陷阱,不是很懂

如果类的一个成员函数的返回值是string类型,需要注意一个问题

其返回值可能是错误的

例如函数的实现如下

function GetString( s: string ): string;

begin

Result := Result + s;

end;

调用方式如下:

procedure test();

var

i: Integer;

s: string;

begin

s := '';

s := GetString( IntToStr( 1 ) );

s := GetString( IntToStr( 2 ) );

end;

那么s的值是什么呢?

答案是“12”,不是“2”

原因是:第一次调用GetString方法,把s和GetString的result指向了同一个地址,第二次调用GetString方法,result指向的仍然是之前的地址,其值仍然为'1',所以结果是'1' + '2' = '12'

当然其中一个问题就是这个函数的返回值没有初始化,当返回值的类型为string时,而delphi并不会进行警告或提示

所以我们一定要养成良好的习惯,如上述实现不应该在初始化result前使用它

==============================================

另一个例子

function GetNumberType( n: Integer ): string;

begin

if n mod 2 = 0 then

Result := '偶数';

end;

procedure TF_Main.btnTestClick(Sender: TObject);

var

i: Integer;

begin

//

for i := 1 to 4 do

AddMsg( '结果:' + GetNumberType( i ) );

end;

结果是:

结果:

结果:偶数

结果:偶数

结果:偶数

http://blog.csdn.net/youthon/article/details/4298524