铸造工会

Bla*_*ble 4 c++ casting unions

由于union在C ++中使用s的经验有限,因此我难以理解对数据类型进行强制转换的基本机制。

假设两种类型的Type_aType_b有型的包装intlong分别。

联合定义为:

union Type_u {
    Type_a a;
    Type_b b;
}
Run Code Online (Sandbox Code Playgroud)

现在,我有了类型的东西Type_a,让我们称之为它j(只是令人困惑)。我需要将其传递给需要参数类型的函数Type_u

void burninate(Type_u peasants);
Run Code Online (Sandbox Code Playgroud)

将此变量传递j给的正确方法是什么burninate?(我遇到了强制j转换Type_u以及按原样传递的问题。两者均未编译。)

可能值得指出的是,我无权修改联合类型(或对此类型Type_a或Type_b或Burninate的签名)。

Yu *_*Hao 5

由于Type_a是第一个元素,因此可以这样初始化一个联合:

Type_a j;
Type_u u = {j};
burninate(u);
Run Code Online (Sandbox Code Playgroud)

如果您想传递以下类型Type_b

Type_b k;
Type_u u;
u.b = k;
burninate(u);
Run Code Online (Sandbox Code Playgroud)

在C和C ++中,这是有区别的。在C99中,可以使用指定的初始化程序来初始化不是第一个元素。

Type_b k;
Type_u u = {.b = k};
burninate(u);
Run Code Online (Sandbox Code Playgroud)