是常数记录';在Delphi中使用默认值初始化的未列出元素?

是常数记录';在Delphi中使用默认值初始化的未列出元素?,delphi,initialization,constants,record,Delphi,Initialization,Constants,Record,让我们假设这些声明: type TMyRec = record Name : String; Age : Integer; Married : Boolean; end; TMyRecArray = Array[0..3] of TMyRec; const RecArray: TMyRecArray = ((Name: 'John' ; Age: 25; Married: False),

让我们假设这些声明:

type
  TMyRec = record
    Name    : String;
    Age     : Integer;
    Married : Boolean;
  end;

  TMyRecArray = Array[0..3] of TMyRec;

const
  RecArray: TMyRecArray = ((Name: 'John' ; Age: 25; Married: False),
                           (Name: 'Wendy'; Age: 32                ),
                           (Name: 'Nick' ;          Married: True ),
                           (               Age: 19; Married: False));
最后三个数组行中未列出的记录元素是否使用默认值自动初始化?或者它们是否包含随机数据


没有对此发表任何官方声明。

您的记录数组常量声明和默认值可以声明为:

const
  RecArray: TMyRecArray = ((),
                           (),
                           (),
                           ());
因此,是的,省略常量声明中的记录字段将生成默认值


不幸的是,这种行为没有记录在案。您必须使用调试器进行验证。
Delphi的前身Turbo Pascal的工作方式几乎相同。必须包括所有字段的值,直到最后一个非默认字段

另请参见感谢路。这是否有文件记录?(不幸的是,记录常数官方docwiki中没有)。不,它没有文档化,所以我们可以说这是只通过编译代码的反向工程实现的实际行为?这是正确的。您需要查看写入可执行文件以表示常量的数据。在调试器下检查它。答案是肯定的,但遗憾的是这没有记录:没有错误。在尝试时,这些值似乎正在初始化,但这并不能证明什么,我只能算幸运。此外,局部变量通常包含似乎是默认值的内容(0表示数字,False表示布尔值),但我们可以确定它们根本没有初始化。@DavidHeffernan是的,我在询问之前阅读了该页;)如果能在邮件中包含到它的链接就好了question@DavidHeffernan完成