我正在阅读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的表示。但是如何避免文本中提到的类型转换?
答案 0 :(得分:1)
它被称为type punning,明确允许在C中使用联合,但不能在C ++中使用。
它起作用(在C中),因为一个联合的所有成员占用相同的内存,所以实际上没有转换。你只需要以不同的方式解释内存的位。