gpt4 book ai didi

delphi - delphi变量默认是用一个值初始化的吗?

转载 作者:行者123 更新时间:2023-12-03 14:32:26 25 4
gpt4 key购买 nike

我是 Delphi 新手,我一直在运行一些测试来查看默认情况下初始化的对象变量和堆栈变量:

TInstanceVariables = class
fBoolean: boolean; // always starts off as false
fInteger: integer; // always starts off as zero
fObject: TObject; // always starts off as nil
end;

这是我在其他语言中习惯的行为,但我想知道在 Delphi 中依赖它是否安全?例如,我想知道它是否可能取决于编译器设置,或者可能在不同的机器上以不同的方式工作。依赖对象的默认初始化值是否正常,或者是否在构造函数中显式设置所有实例变量?

对于堆栈(过程级)变量,我的测试表明,未初始化的 bool 值是 true,未初始化的整数是 2129993264,未初始化的对象只是无效的指针(即不是 nil)。我猜规范是在访问过程级变量之前始终设置它们?

最佳答案

是的,这是记录的行为:

  • 对象字段始终初始化为 0、0.0、''、False、nil 或任何适用的值。

  • 全局变量也始终初始化为 0 等;

  • 本地引用计数*变量始终初始化为 nil 或 '';

  • 本地非引用计数*变量未初始化,因此您必须先赋值才能使用它们。

我记得Barry Kelly某处写了“引用计数”的定义,但无法再找到它,所以这应该同时进行:

reference-counted == that are reference-counted themselves, or directly or indirectly contain fields (for records) or elements (for arrays) that are reference-counted like: string, variant, interface or dynamic array or static array containing such types.

注释:

  • 记录本身不足以成为引用计数
  • 我还没有尝试过使用泛型

关于delphi - delphi变量默认是用一个值初始化的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/132725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com