delphi – 初始化字符串函数结果?
我刚刚调试一个问题,一个函数返回一个字符串,让我担心。我一直假设返回一个字符串的函数的隐式Result变量在函数调用开始时为空,但是下面的(简化的)代码产生了一个意想不到的结果:
function TMyObject.GenerateInfo: string; procedure AppendInfo(const AppendStr: string); begin if(Result > '') then Result := Result + #13; Result := Result + AppendStr; end; begin if(ACondition) then AppendInfo('Some Text'); end; 多次调用此函数导致: "Some Text" 第一次, "Some Text" "Some Text" 第二次, "Some Text" "Some Text" "Some Text" 第三次等。 要解决它,我不得不初始化结果: begin Result := ''; if(ACondition) then AppendInfo('Some Text'); end; 是否有必要初始化一个字符串函数结果?为什么(在技术上)?为什么编译器不发出警告“W1035函数’xxx’的返回值可能未定义”用于字符串函数?我需要通过我的所有代码,以确保一个值被设置为不可靠的期望一个空字符串的函数,如果结果没有明确设置? 我在一个新的测试应用程序测试这个结果是一样的。 procedure TForm1.Button1Click(Sender: TObject); var i: integer; S: string; begin for i := 1 to 5 do S := GenerateInfo; ShowMessage(S); // 5 lines! end; 解决方法
这不是一个错误,而是“
feature”:
也就是说你的 function TMyObject.GenerateInfo: string; 真的是这样: procedure TMyObject.GenerateInfo(var Result: string); 注意“var”前缀(不是“out”,你可能会期望!)。 这是不直观的,所以它导致代码中的所有类型的问题。有问题的代码 – 这个功能的结果的一个例子。 看到并投票选举this request。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |