Type punning:在编程中,用一种数据类型的表示去“当作”另一种类型来解释/访问同一段内存的做法(例如把一段字节按 int、float 或结构体来读)。常见于底层优化、序列化、位级操作等场景,但在某些语言/规则下可能导致未定义行为或违反别名规则(strict aliasing)。
/taɪp ˈpʌnɪŋ/
We used type punning to view the bytes of a float.
我们用类型双关把一个浮点数的内存按字节查看。
In C, type punning through an incompatible pointer can break strict aliasing and cause the optimizer to produce unexpected results.
在 C 语言里,通过不兼容指针进行类型双关可能破坏严格别名规则,从而让优化器产生意料之外的结果。
punning 原意是“双关语”(文字游戏:同一个形式产生不同含义)。type punning 借用这一概念,强调“同一份位/内存表示被赋予了不同类型解释”,像语言里的双关一样“换一种读法就换一种意义”。