0

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

现在,我有一个包含位类型联合的基类(无符号整数和其他对应于每个派生类)。我想将它们拆分到派生类中,并一点一点地构造这个联合。

4

2 回答 2

4

不,例如对于structs/classes, enums

n3337 7.3/1

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

于 2012-10-02T10:02:01.707 回答
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...
}

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

于 2012-10-02T10:23:57.020 回答