Союзы - это не то, что я часто использовал, и, посмотрев на несколько других вопросов на них, кажется, что почти всегда есть какое-то предостережение, где они могут не работать. Например. структуры, возможно имеющие неожиданные дополнения или конечные различия.Является ли использование объединения в этом матричном классе полностью безопасным?
Похоже на это в математической библиотеке, которую я использую, хотя я и задавался вопросом, является ли это абсолютно безопасным использованием. Я предполагаю, что многомерные массивы не имеют дополнительного дополнения, и, поскольку тип одинаковый для обоих определений, они гарантированно занимают точно такой же объем памяти?
template<typename T> class Matrix44T
{
...
union
{
T M[16];
T m[4][4];
} m;
};
Есть ли недостатки в этой настройке? Будет ли порядок определения иметь какое-либо значение для того, как это работает?
@Andreas - спасибо за стандартные определения. Итак, я думаю, единственное, что абсолютно гарантировано для работы, было бы две структуры с идентичным содержимым типа, но разные имена? – identitycrisisuk
@identitycrisisuk Одним словом: да. –
Но есть решение. Вы можете взять указатель на m [0] [0] (т. Е. & M [0] [0]), который имеет тип * T и использовать этот указатель вместо M) – Ingo