在结构/类的常见情况下,成员之间可能存在对齐填充。但我想知道假设这种特殊情况是否安全:
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 的第二种形式来实现相同的目标?