工会如何用于避免类型覆盖
How unions are used to avoid type coversion
我正在阅读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中(,因为联盟的所有成员都占据了相同的记忆,因此实际上没有转换。您只需以不同的方式解释内存的位。
相关文章:
- 使用不同的返回类型覆盖虚拟函数
- C++ 使用不同的返回类型覆盖虚拟函数
- 给定这两种类型,我是否可以确定虚拟函数是否已被覆盖?
- 错误消息:不允许抽象类类型 "X" 的对象:纯虚拟"Y"没有覆盖器
- 无法键入 def std::chrono::microseconds 以覆盖其定义以更改其基础类型
- 当读取错误类型时,CIN覆盖我的初始化值
- 工会如何用于避免类型覆盖
- C++ 重载和覆盖 - 无法使用类型的右值初始化类型的参数
- 衍生模板类的覆盖返回类型
- 仅适用于某些模板类型的覆盖方法
- 抽象类型的对象 - 覆盖不起作用吗?
- 覆盖运算符<<适用于所有类型
- 虚拟函数、覆盖它们的类模板以及不完整的类型
- 覆盖方法返回类型,在C 中使用不完整的派生类
- C 多重继承,虚拟方法覆盖问题和协变量返回类型
- 与基类不同的返回类型的C 覆盖功能
- 警告LNK4206:找不到预编译类型信息; 未链接或覆盖;链接对象,就好像没有调试信息一样
- 如何为基本类型(浮点型)编写替换,以覆盖 运算符 == C++
- 仅覆盖模板中某些类型的函数
- 多个类型覆盖成员函数的模板部分特化