class 和接口之间的继承顺序重要吗?

Does order of inheritance between class and interface matter?

先继承class还是继承C++中的interface会有什么不同吗?

示例:

class A : public IAbstract, public ClassB
{
};

class A : public ClassB, public IAbstract
{
};

是的,对象布局会有所不同。然而在功能上,它是等价的。

在第一种情况下,对象布局将是这样的:

------
IAbstract members, including vptr
------
Class B members
------

第二种情况:

------
Class B members
------
IAbstract members, including vptr
------

直接基 classes(即 ClassBIAbstract)的 initialization order 会有所不同。它由基础 class 说明符列表中的声明顺序决定。

(强调我的)

2) Then, direct base classes are initialized in left-to-right order as they appear in this class's base-specifier list