多重继承中的内存布局
memory layout in 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
切片到[=16=时,它如何工作? ] 对象?
注意:如果我使用转换,这一切都可以。但是我没有。
Bottom
到Right
或Left
是一个正确的转换,而不仅仅是切片。编译器使用 Bottom
中子对象的正确偏移量生成代码。
这个 Dr.Dobbs article 您应该会感兴趣。
#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
切片到[=16=时,它如何工作? ] 对象?
注意:如果我使用转换,这一切都可以。但是我没有。
Bottom
到Right
或Left
是一个正确的转换,而不仅仅是切片。编译器使用 Bottom
中子对象的正确偏移量生成代码。
这个 Dr.Dobbs article 您应该会感兴趣。