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

时间:2013-04-12 12:26:35

标签: c++ arrays c++11 struct alignment

在struct / class的常见情况下,成员之间可能存在对齐填充。但我想知道这种特殊情况是否安全:

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} {}

但是我希望结果与术语实际上是数组的最后一个元素相同。

这样安全吗?如果没有,有没有办法使用第二种形式的MyStruct来实现相同的目标?

1 个答案:

答案 0 :(得分:0)

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