の使用reinterpret_cast
に関する以前のさまざまな質問を読みました。また、C++標準の関連する文言も読みました。基本的に、ポインタからポインタへの操作の結果は、元のポインタ型にキャストバックする以外の目的reinterpret_cast
には安全に使用できないということになります。
ただし、実際には、のほとんどの実際の使用法は、aがCスタイルのキャストと同じでreinterpret_cast
あるという(間違った)仮定に基づいているようです。reinterpret_cast
たとえば、文字セット変換ルーチンの目的でreinterpret_cast
からにキャストするために使用するchar*
コードをたくさん見てきました。unsigned char*
これは完全に無害ですが、厳密に言えば移植性はありません。ポインタを逆参照しようとしたときにfromtoがプログラムをクラッシュさせないreinterpret_cast
というchar*
保証はありません。unsigned char*
unsigned char*
標準によれば、ポインタから整数への変換、およびその逆の変換が実際に保証されている 他の唯一の実際の使用法のようです。reinterpret_cast
それでも、異なるポインタ型間で安全に変換したい(そしてできるはずの)多くの場合があります。例:uint16_t*
新しいC ++ 0xchar16_t*
へのポインタ、または実際には元の型と同じサイズ/配置である基本データ型へのポインタ。しかしreinterpret_cast
、これが機能することを保証するものではありません。
質問:char*
ポインタ間で、同じサイズ/配置の基本データ型( ->など)に安全に変換するにはどうすればよいunsigned char*
ですか?これreinterpret_cast
が実際に機能することを保証していないようですが、ここではCスタイルのキャストが唯一の安全なオプションですか?