是否可以像命名命名空间一样定义联合?我的意思是我们可以在union中声明第一个类型然后在另一个文件中为union添加另一个类型吗?
现在,我有一个基类,它包含一个位类型的联合(unsigned int和其他对应于每个派生类的)。我想在derive类中拆分它们并逐步构造这个联合。
答案 0 :(得分:4)
不,例如structs/classes
,enums
。
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...
}
(注意,根据标准,以上是未定义的行为。 你问的是要求它起作用。)