多继承中的内存布局

时间:2016-02-23 00:42:22

标签: c++ inheritance multiple-inheritance

#include <iostream>
using namespace std;

struct Left
{
   char i = 'k';
};

struct Right
{
   int a = 99;
};

class Bottom : public Left, public Right
{};

int main()
{
    Bottom b;

    Left l = b;
    cout << l.i;

    Right r = b;
    cout << r.a;

    return 0;    
}
// output
// k99

这是怎么回事?

如果Bottom的内存布局是:

Left
Right
Bottom

然后将b(即Bottom)切片到Left对象应该没问题,但是当我将Bottom切片到Right对象时,它怎么能运行?

注意:如果我使用铸造,这一切都可以。但我没有。

1 个答案:

答案 0 :(得分:1)

BottomRightLeft是一种正确的转换,而不仅仅是切片。编译器使用Bottom中子对象的正确偏移量生成代码。

这个Dr.Dobbs article应该引起您的兴趣。