您的位置:首页 > 编程语言 > Delphi

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

2017-07-24 20:04 477 查看
如果类的一个成员函数的返回值是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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐