Bla*_*ble 4 c++ casting unions
由于union在C ++中使用s的经验有限,因此我难以理解对数据类型进行强制转换的基本机制。
假设两种类型的Type_a和Type_b有型的包装int和long分别。
联合定义为:
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的签名)。
由于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)
| 归档时间: |
|
| 查看次数: |
6085 次 |
| 最近记录: |