C++ 连续内存布局中的匿名联合

问题描述 投票:0回答:1
struct Vec
{
    union { float x, r, h; };
    union { float y, g, s; };
    union { float z, b, v; };
};

我想问,C++标准是否保证这些数据会对齐完全一样就像我写的一样

struct Vec
{
    float x, y, z;
};

所以地址

y
紧跟在
x
的地址加上
float
的长度+填充位/对齐?

认为确实如此,但很好奇 ISO C++ 标准是否能保证

c++ standards anonymous memory-layout standard-layout
1个回答
0
投票

认为确实如此,但很好奇它是否得到 ISO C++ 标准的保证?

不是,

union
float
成员之间可以有任意填充。

但是,如果没有充分的理由添加这样的填充,那么添加它就没有任何意义。类布局是 ABI 的一部分,因此在编译所采用的 C++(或底层 C)ABI 规范中指定。您可以在其中获得针对您的特定编译器/平台组合的明确答案。

© www.soinside.com 2019 - 2024. All rights reserved.