我有这堂课:
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
访问成员。在我的用例中,这两个数组似乎完全重叠。标准是否保证始终如此?也就是说,两者都u_.idata
将u_.data
具有相同的起始地址和相同的大小?
编辑:
我使用这个constexpr
构造函数来初始化矩阵:
template <typename ...U>
constexpr matrix(U&&... args) : u_{{::std::forward<U>(args)...}}
{
}
如果没有联合,我将无法在constexpr
构造函数中初始化矩阵。