在相同类型的数组成员之后对齐

Alignment after array member of same type

本文关键字:组成员 之后 对齐 数组 同类型      更新时间:2023-10-16

在结构体/类的常见情况下,成员之间可能存在对齐填充。但是我想知道是否可以这样假设:

template<typename T, size_t N>
struct MyStruct {
    T data[N];
    T term;
    constexpr MyStruct();
};

将可靠地等价于:

template<typename T, size_t N>
struct MyStruct {
    T data[N+1];
    constexpr MyStruct();
};

问这个问题的原因是我真正想要的是能够在constexpr构造函数中显式初始化数组的最后一个成员(但我不关心其余的)。例如,对于顶部MyStruct,我可以这样做:

template<typename T, size_t N>
constexpr MyStruct<T,N>::MyStruct() : data{}, term{0} {}

但是我希望结果与如果term是数组的最后一个元素相同。

这安全吗?如果没有,是否有一种方法可以使用MyStruct的第二种形式来实现同样的事情?

假设在你的数据[N]和你的term变量之间没有差距是绝对不安全的。例如,您可以显式地控制Microsoft编译器如何将变量对齐到n字节边界(其中n为1、2、4、8或16),参见http://msdn.microsoft.com/en-us/library/xh3e3fd0(v=vs.80).aspx.