C ++联合定义

时间:2012-10-02 10:00:07

标签: c++ unions

是否可以像命名命名空间一样定义联合?我的意思是我们可以在union中声明第一个类型然后在另一个文件中为union添加另一个类型吗?

现在,我有一个基类,它包含一个位类型的联合(unsigned int和其他对应于每个派生类的)。我想在derive类中拆分它们并逐步构造这个联合。

2 个答案:

答案 0 :(得分:4)

不,例如structs/classesenums

n3337 7.3 / 1

命名空间是可选命名的声明性区域。命名空间的名称可用于访问 在该命名空间中声明的实体也就是命名空间的成员。 与其他声明性区域 不同, 命名空间的定义可以拆分为一个或多个翻译单元的几个部分。

答案 1 :(得分:1)

没有。它怎么可能工作(不是那个可取的),用 单独编译。考虑类似的事情:

union U { int i; double d; }

void
f()
{
    U aU;
    g( &aU );
    //  ...
}

编译器在堆栈上为aU分配了多少空间。 鉴于尚未编写的DLL包含:

union U { char buff[1000]; };

void
g( U* aU )
{
    //  Use all 1000 bytes...
}

(注意,根据标准,以上是未定义的行为。 你问的是要求它起作用。)