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)检索它。