通常它没有意义,非常不安全,但理论上只有在有办法的情况下,
以下是示例:
#include<iostream>
struct A {
uint32_t &get() {
return *reinterpret_cast<uint32_t *>(this);
}
void set(const uint32_t val) {
*this = *reinterpret_cast<const A *>(&val);
}
};
struct B : A {
uint16_t a;
uint16_t b;
void set_b(const uint32_t val) {
*this = *reinterpret_cast<const B *>(&val);
}
};
main() {
B k;
k.a = 0x1234;
k.b = 0x5678;
std::cout << std::hex << k.get() << " : " << k.a << " " << k.b << std::endl;
k.set_b(0x87654321);
std::cout << std::hex << k.get() << " : " << k.a << " " << k.b << std::endl;
k.set(0xaabbccdd);
std::cout << std::hex << k.get() << " : " << k.a << " " << k.b << std::endl;
}
我得到这个结果:
56781234 : 1234 5678
87654321 : 4321 8765
87654321 : 4321 8765
但我除了最后一个应该是:
aabbccdd : ccdd aabb
那么,为什么覆盖父级结构中的数据不起作用呢?
实验:
我做了一个实验,在结构A中添加一个变量,然后设置函数按预期工作(但最终的结构更大)
当然,有不同的方法来处理这个问题(例如工会),但我只是在玩这个,我感兴趣的是为什么这不起作用。