reinterpret_cast
はこれには安全ですか?これを行う最良の方法はありますか?符号なし整数にC++で符号なし整数を書き込む
たとえば、以下のコードではibytestream
というクラスがあり、それによってuint16_t
およびint16_t
が読み取られます。 ibytestream::next
はvector<unsigned char>::iterator
です。
inline ibytestream& operator>>(ibytestream& stream, uint16_t& data) {
data = 0;
data |= *stream.next++;
data <<= 8;
data |= *stream.next++;
return stream;
}
inline ibytestream& operator>>(ibytestream& stream, int16_t& data) {
return stream >> reinterpret_cast<uint16_t&>(data);
}
Iは、整数のバイトを変換するためのコードを複製したくないので、私は、符号なしのバージョンからコードを再利用するために署名されたバージョンのreinterpret_cast
を用います。私のマシンでは正常に動作しますが、他の現代マシンでは一般的に動作しますか?
厳密なエイリアシングルールに違反しないでしょうか? http://stackoverflow.com/q/98650/417197 –
@Andreルールは、整数型と符号付き/符号なしバリアントの間のエイリアシングを許可します –