私はこのクラスを持っています:
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_.idata
がu_.data
同じ開始アドレスと同じサイズになるということですか?
編集:
このconstexpr
コンストラクターを使用してマトリックスを初期化します。
template <typename ...U>
constexpr matrix(U&&... args) : u_{{::std::forward<U>(args)...}}
{
}
ユニオンがなければ、constexpr
コンストラクターでマトリックスを初期化する方法がありません。