struct - 如何在 D 中初始化全局结构数组?

标签 struct initialization d

为了帮助我用 D 问题 (=p) 填充 SO,我遇到了另一个问题;全局初始化结构数组。观察:

struct A
{
    int a;
    float b;
}

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

void main() {}

结果:

$ dmd wtf.d 
wtf.d(8): no identifier for declarator as[0]
wtf.d(9): no identifier for declarator as[1]

查看 Digital Mars 上的文档,我真的看不到任何对我来说完全明显的东西,所以我再次转向 Stack Overflow 的勇敢居民!我猜错误消息与真正的问题没有太大关系,因为 [0] is 肯定是一个标识符(但 dmd 认为它是一个声明符,哪个 AFAICT 正在查看 docs ,不是)?

最佳答案

我不认为你可以像这样在每个元素的基础上初始化元素。这行得通吗?

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

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

as[0] = {0, 0.0f};
as[0] = {1, 1.0f};

as[0] 在程序初始化时的值是多少?这越来越像 statements 而不是 initialisers

请注意,在 D 中,您可以像这样在特定索引处初始化数组元素:

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

如果您有一个较大的数组(例如 A[10])并且只需要初始化一些元素,这将很有用。见 Arrays在 D 引用文档中了解更多信息。

关于struct - 如何在 D 中初始化全局结构数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1324942/

相关文章:

c - 结构操作需要一些解释

c - 未初始化的变量的值是多少?

c++ - 是否可以用 lambda 初始化变量(当复制 ctor 被删除时)?

c - SHA1 十六进制摘要转长

c - 在其他结构中使用结构。 C

C 在 struct free() 中动态分配结构

c - Malloc 时出现段错误 11

ruby - 在 ruby​​ 中调用父构造函数

shared - D中的"Shared"和"__gshared"关键字

d - 添加到 D 中的动态数组?