C++联合定义

C++ union definition

本文关键字:定义 C++      更新时间:2023-10-16

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

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

否,例如对于structs/classesenums

N3337 7.3/1

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

No. 它怎么能工作(不是说它是可取的),与单独编译。 考虑如下内容:

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...
}

(请注意,根据标准,以上是未定义的行为。你所要求的是需要它工作。