🥑

c++ type punningについて

2023/09/23に公開

typePunningとは

あるデータ型を異なるデータ型に再解釈すること。
値をコピーして型変換するわけではないので、無駄なメモリーを確保することはない。(
同じメモリアドレスのまま型だけが再解釈される(つまり、型を変換しているというよりビット単位で再解釈しているのだとおもう)
言語的にサポートしていないものも多く存在する。
C++のStrict Aliasing Ruleによって再解釈しても未定義の実装になってしまうことがあるので、reinterpret_castやUnionは余り使用されない。memcpy(c+17以前)か(c++20以降)を使用するらしい。

Unityではアンマネージドメモリに対して再解釈するようのAPIが用意されている。
事実上、扱っている中身は同じなんだけどAPIの都合上使いにくいみたいなときに使用できるかも??しれません。
https://docs.unity3d.com/ScriptReference/Unity.Collections.NativeArray_1.Reinterpret.html

Discussion