gpt4 book ai didi

c++ - 将 POD 结构转换为派生类型

转载 作者:搜寻专家 更新时间:2023-10-31 01:44:21 29 4
gpt4 key购买 nike

在处理遗留项目时,我遇到了以下模式:POD 结构用于通过网络传输数据。

struct PODType {
// some data
int data;
};

在接收方,数据被接收到 POD 类型的对象中。稍后,从 PODType 派生一个类,并将接收到的对象以 C 风格转换为派生类,以使用一些方法访问数据。

class DerivedFromPOD: public PODType {
public:
// some methods
int f(int x) {return data+x;}
protected:
// some methods
};

PODType pod;
receive(&pod);

DerivedFromPOD* d = (DerivedFromPOD*)&pod;
int i = d->f(10);

派生类有public和protected方法,所以它不再是POD了。我知道这是对继承的滥用,但它已经存在于代码库中很长时间了。

我想知道从标准的角度(C++03 或 C++98)来看,这是否能保证工作。派生类没有任何自己的数据成员或虚函数,但我不确定它是否保证内存布局相同,因为一个是 POD 而另一个不是。编译器是否被迫安排 DerivedFromPOD,使得 d.data 的地址与 DerivedFromPOD 类型的对象 d 的地址相同,就像 POD 基类一样?

最佳答案

它当然不能保证在一般情况下工作(尝试向派生类添加虚函数),并且是正式的未定义行为。 (我也看不出如何使用 struct 来帮助通过网络传输数据。不同的机器会以不同的方式表示它。)

关于c++ - 将 POD 结构转换为派生类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23630513/

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