在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来实现相同的目标?
答案 0 :(得分:0)
假设数据[N]与您的术语变量之间没有差距绝对不安全。例如,您可以显式控制Microsoft编译器如何将变量与n字节边界对齐(其中n为1,2,4,8或16),请参阅http://msdn.microsoft.com/en-us/library/xh3e3fd0(v=vs.80).aspx。