gpt4 book ai didi

C++:为什么要编译? (将 this-Reference 传递给基类)

转载 作者:行者123 更新时间:2023-11-28 06:03:47 25 4
gpt4 key购买 nike

我正在使用多重继承,一个基类 (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;
}

最佳答案

BaseBNeedsA 有一个隐式定义的复制构造函数:

BaseBNeedsA(const BaseBNeedsA&);

由调用选择:

BaseBNeedsA(*this)

因为 Derived 类中的 *this 可以通过对 BaseBNeedsA 的引用进行绑定(bind)。

关于C++:为什么要编译? (将 this-Reference 传递给基类),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32784994/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com