我使用多重继承,一个基类(BaseBNeedsA
)需要访问另一个基类(BaseA
)。我知道这可以通过委托解决更清晰,但它确实会有很多转发代码,我有几个类似的类BaseBNeedsA
。
在Visual Studio 2013中,我可以使用BaseA &
进行访问,在Visual Studio 2015中,这似乎会导致对象切片等。 (编译,但引用无效)。所以我将其更改为BaseA * const
,一切正常。然而,在这样做时,我发现了一些奇怪的东西。下面的代码在Visual Studio 2015中编译,我无法弄清楚为什么它应该。
class BaseA
{ };
class BaseBNeedsA
{
public:
BaseBNeedsA(BaseA *baseA)
: _baseA(baseA)
{ }
private:
BaseA * const _baseA;
};
class Derived : public BaseA, public BaseBNeedsA
{
public:
Derived()
: BaseA(),
BaseBNeedsA(*this) // Why does this compile? Handing a BaseA&, but BaseA* required!
{ }
};
int main(int argc, char** argv)
{
Derived d;
return 0;
}
答案 0 :(得分:1)
类BaseBNeedsA
具有隐式定义的复制构造函数:
BaseBNeedsA(const BaseBNeedsA&);
由电话挑选:
BaseBNeedsA(*this)
因为类*this
中的Derived
可以通过对BaseBNeedsA
的引用进行约束。