工会如何用于避免类型覆盖

How unions are used to avoid type coversion

本文关键字:类型 覆盖 用于 何用于      更新时间:2023-10-16

我正在阅读Bjarne Stroustrup的C 编程语言。它在工会上说明:

"偶尔会故意使用工会来避免类型转换。例如,一个可能使用软糖查找指针0:

的表示形式
union Fudge{
    int i;
    int* p;
};
int main()
{
    Fudge foo;
    foo.p= 0;
    cout<< "the integer value of the pointer 0 is" << foo.i<< ´n´;
} "

我知道这个代码片段给出了指针0的代表0。但是如何避免文本中的类型转换?

它被称为 type punning ,并且在C中使用工会明确允许,但在C 中不允许。

它起作用(在C中(,因为联盟的所有成员都占据了相同的记忆,因此实际上没有转换。您只需以不同的方式解释内存的位。