на главнуюВсе эхи RU.CPP
войти ?

Re: Выравнивание и наследование

От Serguei E. Leontiev (2:5020/400) к Soldatenkov Mitea

В ответ на Заголовок предыдущего сообщения в треде (Имя Автора)


From: leo@sai.msu.ru (Serguei E. Leontiev)

Здравствуй Soldatenkov,

Soldatenkov Mitea -> All @ вт 13-апр-10 13:47 MSD:

SM> class Class1
SM> {
SM> public:
SM> int X;
SM> char C;
SM> };
SM> class Class2:public Class1
SM> {
SM> public:
SM> char Q;
SM> };
SM> Спрашивается - как при минимальных плясках с бубном добиться того что бы
SM> во-первых, размер Class1 был выровнен на четыре байта, во-вторых, размер
SM> Class2 был равен восьми байтам? То есть, что бы место в конце Class1 не просто
SM> резервировалось место под выравнивание, но и использовалось потомками.

Что-то ты хочешь странного, т.е. для
Class2 c2;
Class1 *pc1 = &c2;

sizeof(*pc1) == sizeof(c2) == 8

Что, на мой взгляд, противоречит п. 3.9 Types стандарта C++03, который
описывает следующие операции как допустимые:

char buf[sizeof(*pc1)];

memcpy(buf, pc1, sizeof(*pc1));
memcpy(pc1, buf, sizeof(*pc1));

Class1 c1;

memcpy(pc1, &c1, sizeof(*pc1));

--
Успехов, Сергей Леонтьев. E-mail: lse@CryptoPro.ru <http://www.cryptopro.ru>
--- ifmail v.2.15dev5.4
* Origin: ГАИШ, МГУ (2:5020/400)

Ответы на это письмо:

From: Username
Заголовок следующего сообщения в треде может быть длинным и его придется перенести на новую строку

From: Username
Или коротким

FGHI-url этого письма: area://RU.CPP?msgid=<1187395549@leom.leo.home>+3ca5b347