#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
对象时,它怎么能运行?
注意:如果我使用铸造,这一切都可以。但我没有。
答案 0 :(得分:1)
Bottom
到Right
或Left
是一种正确的转换,而不仅仅是切片。编译器使用Bottom
中子对象的正确偏移量生成代码。
这个Dr.Dobbs article应该引起您的兴趣。