Delphi 是函数';结果总是初始化的吗?

Delphi 是函数';结果总是初始化的吗?,delphi,types,Delphi,Types,可能重复: 与此类似,我现在提出以下问题 function Test:Boolean; begin end; 结果值是否始终保证为假(0)?整数值不是,布尔值也是?否,如果不初始化值类型函数结果,则其值未定义。它可以是False(0)、True(1)或其他某个整数值 您可以从与局部变量相同的角度查看函数返回变量,而局部变量在使用前当然需要初始化 这个故事的寓意是什么?始终初始化函数返回值。是的,这是你的运气。您的函数实际上只是返回EAX寄存器的当前内容。调用该函数之前的任何代码显然都会将其设

可能重复:

与此类似,我现在提出以下问题

function Test:Boolean;
begin end;

结果值是否始终保证为假(0)?整数值不是,布尔值也是?

否,如果不初始化值类型函数结果,则其值未定义。它可以是False(0)、True(1)或其他某个整数值

您可以从与局部变量相同的角度查看函数返回变量,而局部变量在使用前当然需要初始化


这个故事的寓意是什么?始终初始化函数返回值。

是的,这是你的运气。您的函数实际上只是返回EAX寄存器的当前内容。调用该函数之前的任何代码显然都会将其设置为零。等等,你是说该函数编译为的不是简单的
ret
?调用者肯定会从EAX读取结果。为什么函数会对EBX做任何事情,EBX是一个在函数输入时完全没有意义的寄存器?@LU RD no这不是真的。仅对托管类型进行初始化。指针、布尔值、整数、浮点类型等值类型不是。如果您认为值类型的局部变量是初始化的,那么您就有麻烦了。@LU事实上,编译器警告您使用未初始化的局部变量,这是有原因的!注意:托管类型的结果也必须初始化(字符串、接口等)!即使编译器没有对此发出警告:(Jordan Russell于2002年5月16日下午7:21:10)