4
我在我的代码非常愚蠢的错别字......为什么sizeof(this-id)返回8?
is.read((char*)&this->id, sizeof(this-id));
失踪>
字符后this-
有趣sizeof(this - id)
返回8!
我的想法是...因为this
是一个指针,所以在this
上做减法将会导致另一个指针被id值取消,这个指针可以取决于id的值。
而且...在64位系统上,指针通常是8个字节!
我正确吗?或缺少什么?
以下是我所拥有的课程。
class IndexItem : public Serializable {
public:
IndexItem(uint32_t id, std::streampos pos) :
id(id),
pos(pos)
{ }
uint32_t id;
std::streampos pos;
protected:
std::ostream& Serialize(std::ostream& os) const override {
os.write((char*)&this->id, sizeof(this->id));
os.write((char*)&this->pos, sizeof(this->pos));
return os;
}
std::istream& Deserialize(std::istream& is) override {
is.read((char*)&this->id, sizeof(this->id));
is.read((char*)&this->pos, sizeof(this->pos));
return is;
}
};
从技术上讲,这个指针减法是未定义的行为,但我们有sizeof的操作数[未评估,因此这可以避免未定义的行为](http://stackoverflow.com/q/28714018/1708801)的保存优雅。 –
@ShafikYaghmour,即使你不解除减法的结果,它是不确定的吗?无论如何,正如你所说,因为这发生在sizeof内部,这里没有UB。 – toth
它仍然必须是一个有效的指针。 –