如何使用联合来避免类型转换

时间:2018-02-17 18:36:15

标签: c++ type-conversion unions

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

“偶尔会故意使用工会来避免类型转换。例如,有人可能会 使用Fudge查找指针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的表示。但是如何避免文本中提到的类型转换?

1 个答案:

答案 0 :(得分:1)

它被称为type punning,明确允许在C中使用联合,但不能在C ++中使用。

它起作用(在C中),因为一个联合的所有成员占用相同的内存,所以实际上没有转换。你只需要以不同的方式解释内存的位。