我的代码中有一个非常愚蠢的错字......
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;
}
};
答案 0 :(得分:8)
你是对的。您可以向任何指针添加或减去整数类型,从而产生另一个指针,sizeof(this-id)=sizeof(this)
恰好在您的系统中为8。