gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:22:47 25 4
gpt4 key购买 nike

我的代码中有一个非常愚蠢的拼写错误...

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

this-

之后缺少 > 字符

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

我的想法是...因为 this 是一个指针,对 this 做减法将导致另一个指针被 id 的值关闭,它可以是任何东西取决于 id 的值。

还有...在64位系统上,指针通常是8个字节!

我说的对吗?还是遗漏了什么?

下面是我的类(class)。

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。

关于c++ - 为什么 sizeof(this - id) 返回 8?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31552235/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com