如何使用 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
无论如何都无法更改。
假设我有这个简化的 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
无论如何都无法更改。