【发布时间】:2021-12-13 21:29:48
【问题描述】:
我知道您可以有效地执行以下代码来将结构体转换为字节数组,
struct Dummy
{
int a;
int b;
};
Dummy data;
char* buffer = reinterpret_cast<char*>(&data);
然后我们可以使用 char 数组指针一个一个地访问这 8 个字节中的每一个。
我的问题是你能以类似的方式对班级做同样的事情吗?
class Dummy
{
private:
int a;
int b;
};
Dummy data;
char* buffer = reinterpret_cast<char*>(&data);
【问题讨论】:
-
class和struct仅在默认访问修饰符上有所不同。 -
所以在幕后完全一样?即使订购?
-
这是目前标准的灰色地带。
buffer是一个有效的指针,但你能用它做什么取决于你对标准的解释。乐观的解释(我相信预期的解释)将允许这两种情况都访问整个表示。但是Dummy在这两种情况下都可以轻松复制,对于非平凡类型,您可以访问的实际表示不会很有意义。您无法安全地对其进行写入,并且您无法利用从其中读取的信息来做很多事情。 -
@FrançoisAndrieux:
a和b是private时,标准是否保证它们的排序?我希望该标准允许为private成员重新排序以进行优化,但我不确定。如果允许重新排序,则无法保证读取的字节甚至来自特定成员,即使大小和填充规则都是已知的。 -
是的,任何类型的任何对象 - 您都可以检查字节。
标签: c++