【发布时间】:2017-08-26 17:51:14
【问题描述】:
例如我有这个结构
struct A {
float x;
float y;
float z;
};
我可以这样做吗? A a; float* array = (float*)&a;
并使用 as 浮点数组?
【问题讨论】:
-
不,变量之间可能有填充。
-
我的意思是在某处放置一个
static_assert(sizeof (A) == sizeof (float) * 3, "blah")。然后,如果你的编译器决定添加填充,你会得到一个很好的错误。但我有 99% 的把握它不会这样做。 -
@HolyBlackCat - 它可能会导致比你想象的更多的错误。在具有 4 字节浮点数的 64 位机器上,编译器很可能会在结构的末尾添加填充,以使结构与机器字边界对齐。
-
@StoryTeller 我认为如果编译器只在最后添加填充没有问题,是吗?
-
@SemyonTikhonenko - 这是一个问题,因为静态断言会触发。尽管所有“临时”的人都会正确地说您的 hack 会起作用。
标签: c++