3

私はこのクラスを持っています:

template <typename T, ::std::size_t M, ::std::size_t N>
struct matrix
{
private:
  union
  {
    T idata[M * N];
    T data[M][N];
  } u_;
};

ユニオン メンバーを使用しidataてマトリックスとdataアクセス用のメンバーを初期化します。私のユースケースでは、2つの配列が完全に重複しているようです。標準は、これが常に当てはまることを保証していますか? つまり、 と の両方u_.idatau_.data同じ開始アドレスと同じサイズになるということですか?

編集:

このconstexprコンストラクターを使用してマトリックスを初期化します。

template <typename ...U>
constexpr matrix(U&&... args) : u_{{::std::forward<U>(args)...}}
{
}

ユニオンがなければ、constexprコンストラクターでマトリックスを初期化する方法がありません。

4

1 に答える 1