不管有没有给Result赋过值,函数都有返回值的。区别在于: 如果给Result赋过值,则返回值为该值。 如果没有给Result赋过值,则返回值是个不确定的值。(Delphi帮助中的原文如下: If the function exits without assigning a value to Result or the function name, then the function's return value is undefined.)
这个观点有问题,看编译后的汇编代码就会发现Delphi编译器是没有给函数返回值赋默认值的。用下面的代码测试一下就清楚了:function A(i: Integer): Integer; begin if i > 0 then Result := i; end;procedure TForm1.FormCreate(Sender: TObject); begin ShowMessage (IntToStr(A(0))); ShowMessage (IntToStr(A(0))); end;
不要乱讲害人。去看Delphi编译出来的汇编代码如果真像你说的这样,VCL源码里也不用写 Result := 0; 之类的初始化语句了。再说给个默认值一点好处也没有,只会浪费汇编程序,Delphi的开发工程师怎么会这么笨。
如果给Result赋过值,则返回值为该值。
如果没有给Result赋过值,则返回值是个不确定的值。(Delphi帮助中的原文如下: If the function exits without assigning a value to Result or the function name, then the function's return value is undefined.)
int类型的为0,string类型的为‘’,tobject类型的为nil
这个观点有问题,看编译后的汇编代码就会发现Delphi编译器是没有给函数返回值赋默认值的。用下面的代码测试一下就清楚了:function A(i: Integer): Integer;
begin
if i > 0 then Result := i;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
ShowMessage (IntToStr(A(0)));
ShowMessage (IntToStr(A(0)));
end;