構造体/クラスの一般的な状況では、メンバー間にアラインメント パディングが存在する場合があります。しかし、この特殊なケースを想定しても安全かどうか疑問に思っています。
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 の 2 番目の形式を使用して同じことを達成する方法はありますか?