是否可以像我们为命名空间做的那样定义一个联合?我的意思是我们可以在联合中声明第一种类型,然后在另一个文件中向联合中添加另一种类型吗?
现在,我有一个包含位类型联合的基类(无符号整数和其他对应于每个派生类)。我想将它们拆分到派生类中,并一点一点地构造这个联合。
不,例如对于structs/classes
, enums
。
n3337 7.3/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...
}
(请注意,根据标准,以上是未定义的行为。您所要求的将要求它起作用。)