如何在使用Visual Studio 编译器使用多重继承时优化对象的内存大小?


#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字节的答案:为什么空基类优化不起作用?

解决方案是链接所有基类。为了简洁,我们可以这样写:

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"中找到此模式的更多代码

最新更新