#include <iostream>
class A {};
class B {};
class C : public A, public B {
int a;
};
int main() {
std::cout << sizeof(C) << std::endl;
return 0;
}
如果我使用 cl 编译以上代码,输出为“8”。使用 g++ 编译时,输出将为“4”。
如果没有多重继承,两个编译器的输出都是“4”。
谢谢。
最佳答案
这是 8 字节的答案:Why empty base class optimization is not working?
解决方案是链接所有基类。为了优雅,我们可以这样写:
template <class Base = empty_base>
class A1 : public Base {};
template <class Base = empty_base>
class A2 : public Base {};
template <class Base =empty_base>
class A3 : public Base {};
class C : public A1<A2<A3> > { int c; };
您可以在“boost/operators.hpp”中找到此模式的更多代码
关于c++ - 如何在使用 Visual Studio 编译器使用多重继承时优化对象的内存大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24722070/