class A
{
public:
int _a;
};
class B
{
public:
int _b;
};
class C : public A, private B
{
public:
int _c;
};
C c;
c._c = 10;
c._a = 20;
B* b = (B*)(&c);
b->_b = 30;
Сосбственно вопрос: куда должен указывать указатель b?
У меня результат на VC7.1 был корректный. Но есть такое подозрение что он наплевал на private наследование, а судя по логике должен был
указывать на самое начало объекта, т.е. на a. И последняя строка как бы должна была изменить _а на 30.
Про это здесь писали Павел Кузнецов и Андрей Тарасевич — такой каст работает через закрытое наследование и работает правильно.
D>Через поиск не нашел, может ссылочка имеется?
http://rsdn.ru/forum/?mid=523418Автор: Павел Кузнецов
Дата: 29.01.04
D>И кстати такое преобразование правельно относительно стандарта?
5.4/7