簽名是reinterpret_cast
安全的這一點,是它這樣做的最佳方式?寫有符號整數,就好像它是在C++
例如,在下面的代碼中,我有一個名爲ibytestream
的類,它允許從中讀取uint16_t
s和int16_t
s。 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);
}
我不想重複的代碼轉換字節爲整數,所以我用reinterpret_cast
的簽名版本重用無符號版本的代碼。它可以在我的機器上正常工作,但它是否可以在其他現代機器上運行?
這是不是違反了嚴格別名規則? http://stackoverflow.com/q/98650/417197 –
@Andre規則允許的整數類型及其無/有符號變種 –