Предположим, что у меня есть 2 типа A
и B
с одинаковым размером, и у меня есть две переменные
A a = ... ; // Initialized to some constant of type A
B b;
Если я скопирую содержимое A
в B
, используя что-то вроде -
assert(sizeof(A) == sizeof(B));
size_t t;
for( t=0; t < sizeof(A); t++){
((char*)&b)[t] = ((char*)&a)[t];
}
Означает ли это нарушение строгих правил псевдонимов C?
Я знаю, что накладываю указатель на char*
, и чтение его не является UB, но меня беспокоят обе причины, связанные с назначением.
Если это не UB, может ли это быть допустимым способом для записи типа?