При копировании объекта объединения создается подобъект члена?
Когда осуществляется доступ к другому члену объединения, стандарт C++ обычно молчал о том, что происходит, но это было исправлено, чтобы объяснить, что доступ членов к объекту объединения был разрешен с целью присвоения этому еще не существующему объекту, что волшебным образом создать объект, присвоив ему или одному из его членов. По сути, оператор доступа к члену возвращает обещание будущего объекта, и вы должны использовать его с присваиванием.
Данный
union U {
int i;
long l;
};
Мы можем создать i
или l
подобъект участника по назначению:
U u;
u.i = 2; // creates an int
u.l = 3; // creates a long (destroys the int)
Но что происходит при копировании объекта union? Как компилятор "узнает", какой член "создать"?
U u1, u2;
fill(&u1);
u2 = u1; // which u2 member is created here?
Когда используешь memcpy
при объединении из буфера байтов, заполненных числовыми значениями (не заполненных из другого объекта объединения), какой член становится "активным"?
char buf[sizeof(U)] = { ... };
U u;
memcpy(&u, buf, sizeof u);