の使用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スタイルのキャストが唯一の安全なオプションですか?