为什么sizeof(this-id)返回8?

时间:2015-07-22 01:07:24

标签: c++

我的代码中有一个非常愚蠢的错字......

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;
  }
};

1 个答案:

答案 0 :(得分:8)

你是对的。您可以向任何指针添加或减去整数类型,从而产生另一个指针,sizeof(this-id)=sizeof(this)恰好在您的系统中为8。