0

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

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 的第二种形式来实现相同的目标?

4

1 回答 1

0

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

于 2013-04-12T12:31:33.393 回答