【问题标题】:Is function's result always initialized? [duplicate]函数的结果总是初始化吗? [复制]
【发布时间】:2011-03-25 07:01:07
【问题描述】:

可能重复:
What is the default value of Result in Delphi

类似于this question,我现在问如下。

function Test:Boolean;
begin end;

结果值总是是否保证为 false(0)?整数值不是,布尔值也是?

【问题讨论】:

    标签: delphi types


    【解决方案1】:

    不,如果你不初始化一个值类型函数结果,那么它的值是未定义的。它可能是 False (0)、True (1) 或其他整数值。

    您可以像查看局部变量一样查看函数返回变量,当然需要在使用前对其进行初始化。

    故事的寓意?始终初始化您的函数返回值。

    【讨论】:

    • 是的,这是你的运气。您的函数实际上只是返回 EAX 寄存器的当前内容。无论您调用该函数之前的任何代码,显然都将其设置为零。
    • 等等——你是说这个函数编译成的不是简单的ret?调用者肯定会从 EAX 读取结果。为什么函数会使用 EBX 做任何事情,EBX 是一个在进入函数时完全没有意义的寄存器?
    • @LU RD 不,那不是真的。只有托管类型被初始化。指针、布尔值、整数、浮点类型等,值类型都不是。如果你认为值类型的局部变量已经被初始化,那么你就有麻烦了。
    • @LU 事实上,编译器警告你使用了未初始化的局部变量,这是为了什么!
    • 注意:托管类型的结果必须也被初始化(字符串、接口等)!即使编译器没有发出警告:qc.embarcadero.com/wc/qcmain.aspx?d=894(Jordan Russell 在 5/16/2002 7:21:10 PM)
    猜你喜欢
    • 2010-11-02
    • 2013-12-31
    • 2011-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-11
    • 1970-01-01
    相关资源
    最近更新 更多