如何使用 union const 成员?

How to use union const members?

假设我有这个简化的 class:

class A {
    this(const char* result)
    {
        this.result = result;
    }

    private:
        union{
            const char** results;
            const char* result;
        }
}

编译失败 constructor app.A.this missing initializer for const field results。我知道如果我删除联合定义中的 const 限定符我可以让它编译,但我知道成员是常量。


编辑:

当我将代码更改为:

class A {
    this(const char* result)
    {
        this.U.result = result;
    }

    private:
        union U {
            const char** results;
            const char* result;
        }
}

我收到另一个错误:Error: need 'this' for 'result' of type 'const(char*)'

顺便说一句,我用的是 dmd v2.068.2

最简单的就是初始化它:

    this.results = null;
    this.result = result;

确保首先设置您不使用的那些,因为您不想用 null 覆盖联合!

您也可以将其设为命名联合:

    union A{
        const char** results;
        const char* result;
    }

    A a;

this(const char* result)
{
    this.a.result = result;
}

然后编译器意识到它们都是一个字段,只要求初始化一次。

我认为您的代码不起作用可以说是一个错误...看起来编译器以相同的方式处理匿名联合和结构,然后联合应该不同,因为一个变量涵盖了它们。

但是简单地设置两者的解决方法是可行的,所以我现在就是这样做的。编辑:实际上,我想我更喜欢命名联合选项。那么后面看代码的时候就更明显一点了。

我认为你的代码没有意义。我猜你对 const 的用法是错误的。

class A {
    this(const(char)* result)
    {
        this.result = result;
    }

    private:
    union
    {
        const(const(char)*)* results; // maybe const(char)** results
        const(char)* result;
    }
}

或者您可以删除并集:

class A {
    this(const char* result)
    {
        this.result = result;
    }

    private:
    const char* result;        
}

因为 const char** result 无论如何都无法更改。