【发布时间】:2016-12-23 08:11:51
【问题描述】:
reinterpret_cast 这样做安全吗?这是最好的方法吗?
例如,在下面的代码中,我有一个名为ibytestream 的类,它允许从中读取uint16_ts 和int16_ts。 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 作为签名版本以重用未签名版本的代码。它在我的机器上运行良好,但在其他现代机器上也能正常运行吗?
【问题讨论】:
-
这不会违反严格的别名规则吗? stackoverflow.com/q/98650/417197
-
@Andre 该规则允许整数类型与其有符号/无符号变体之间的别名
标签: c++ reinterpret-cast