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: l...@CryptoPro.ru <http://www.cryptopro.ru>