При копировании объекта объединения создается подобъект члена?

Когда осуществляется доступ к другому члену объединения, стандарт 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);

0 ответов

Другие вопросы по тегам