如何初始化D中的全局结构数组?

Ber*_*ard 3 struct d initialization

为了帮助我用D问题填充SO(= p),我遇到了另一个问题; 在全球范围内初始化一系列结构.注意:

struct A
{
    int a;
    float b;
}

A[2] as;
as[0] = {0, 0.0f};
as[1] = {5, 5.2f};

void main() {}
Run Code Online (Sandbox Code Playgroud)

结果是:

$ dmd wtf.d 
wtf.d(8): no identifier for declarator as[0]
wtf.d(9): no identifier for declarator as[1]
Run Code Online (Sandbox Code Playgroud)

通过数字火星的文档,我无法真正看到任何对我来说显而易见的东西,所以我再次转向Stack Overflow的勇敢居民!我猜测错误信息与真正的问题没什么关系,因为[0] 一个标识符(但dmd认为它是一个声明者,AFAICT查看文档,它不是)?

Gre*_*ill 6

我不认为你可以像每个元素那样初始化元素.这会有用吗?

A[2] as = [
    {0, 0.0f},
    {5, 5.2f}
];
Run Code Online (Sandbox Code Playgroud)

考虑一下,如果在您的示例中,您as[0]不止一次提到过会发生什么:

as[0] = {0, 0.0f};
as[0] = {1, 1.0f};
Run Code Online (Sandbox Code Playgroud)

as[0]程序初始化的价值是什么?这变得更像是陈述而不是初始化.

请注意,在D中,您可以在特定索引处初始化数组元素,如下所示:

A[2] as = [
    0: {0, 0.0f},
    1: {5, 5.2f}
];
Run Code Online (Sandbox Code Playgroud)

如果你有一个更大的数组(例如A[10])并且只需要初始化一些元素,这将非常有用.有关详细信息,请参阅D参考文档中的阵列.