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

C++ 为什么sizeof(this-id)返回8?,c++,C++,我的代码有一个很愚蠢的错误 is.read((char*)&this->id, sizeof(this-id)); 此- 有趣的是sizeof(this-id)返回了8 我想的是。。。由于此是一个指针,因此对此执行减法操作将导致另一个指针被id值关闭,该值可以是任何取决于id值的值 而且。。。在64位系统上,指针通常为8字节 我说得对吗?还是错过了什么 下面是我上的课 class IndexItem : public Serializable { public: IndexI

我的代码有一个很愚蠢的错误

is.read((char*)&this->id, sizeof(this-id));
此-

有趣的是
sizeof(this-id)
返回了8

我想的是。。。由于
是一个指针,因此对
执行减法操作将导致另一个指针被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(this id)=sizeof(this)
,它在您的系统中正好是8。

从技术上讲,此指针减法是未定义的行为,但我们具有sizeof的操作数所具有的保存优势。@ShafikYaghmour,即使不取消对减法结果的引用,它是否未定义?在任何情况下,正如您所说,因为这发生在sizeof内部,所以这里没有UB。注意:Boost减去SharedMemory API的指针,以获得偏移量(this-blah)或偏移量ptr,这样他们可以将容器存储在内存块中,并使用另一个读取相同内存块的程序(通过偏移量+this)检索它。