prev
next
ru.cpp
FromSerguei E. Leontiev0:0/0.0Date Write2010-04-20 03:36:04
ToSoldatenkov Mitea0:0/0.0Date Arrived2010-04-20 11:05:21
SubjRe: Выравнивание и наследование
Attr
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)