D:模板化结构:未初始化

时间:2013-12-21 01:34:52

标签: d

我正在努力学习D(谷歌搜索这种语言是不可能的,顺便提一下。),我坚持这个问题。

考虑:

// Bitfield utilities
struct RegBit(int bitnumber, int nbits, T) {
    T data;
    uint mask = 46;
    ubyte r = 3;
}

struct cpu_t {

// registers
union {
    ushort AF = 56;
    struct {
        ubyte F;
        ubyte A;
    };
    // flags
    RegBit!(7, 1, ushort) fZ;
    RegBit!(6, 1, ushort) fN;
    RegBit!(5, 1, ushort) fH;
    RegBit!(4, 1, ushort) fC;
};

然后运行它,

writefln ("%d", CPU.fC.data);
writefln ("%d", CPU.fC.r);

产生输出

56
0

我的问题是:为什么?

1 个答案:

答案 0 :(得分:4)

初始化的联合的唯一字段是AF,这恰好与RegBit结构的数据字段一致。其余所有内容在标准初始化期间都会被忽略,因此r的{​​{1}}字段永远不会被触及(并且无论如何都会相同)

真正的问题是使用联盟,说实话,在大多数情况下你不应该需要它