В следующем коде:
#include <iostream>
class a {
char a;
};
class b : virtual public a {
char b;
};
class c : virtual public a {
char c;
};
class d : public b, public c {
char d;
};
int main() {
std::cout << "sizeof a: " << sizeof(a) << std::endl;
std::cout << "sizeof b: " << sizeof(b) << std::endl;
std::cout << "sizeof c: " << sizeof(c) << std::endl;
std::cout << "sizeof d: " << sizeof(d) << std::endl;
return 0;
}
вывод:
sizeof a: 1
sizeof b: 16
sizeof c: 16
sizeof d: 32
Я хочу знать, почему увеличенный размер равен 16. Размер символа равен 1, что означает увеличенный размер15. Я знаю, что виртуальному классу нужен указатель для его смещения, который добавляет 4 байта, тогда 11 байтов не имеет никакого смысла.Может кто-нибудь объяснить, почему это происходит, у меня другой вопрос, так как это дело о наследовании бриллиантов