reinterpret_cast

C++ の思想としてキャストはなるべく無いほうが良い、というのがあって、
作った人の考えには従うようにした方が良いのだろうなという考えとともに
reinterpret_cast も使わない方が良いのだろうか。と悩んできました。


そもそも reinterpret_cast の何がまずいのかというと、
高級言語C++ でせっかく抽象化したデータを特定環境に依存した
メモリ配置と結び付けてしまうため可搬性がなくなってしまうということです。


しかし考えてみれば、バイナリデータを用いる部分というのは
プラットフォーム固有の API にアクセスしたりすることが多いものです。
となれば、こういう場面での reinterpret_cast は、環境依存であるということを
意識しながら使ってしまっても良いと言えます。


そして、 reinterpret_cast は環境依存な処理をするモジュール内にとどめて
外側には見せないようにしておけばこれを利用するクライアントコードの
可搬性は保たれることになります。


というわけで今後は恐れることなく reinterpret_cast を使っていこうと思います。
(今までも散々使っていたけど気持ちが軽くなりました。)