c++:为什么可以编译?(处理this-Reference到基类)
C++: Why does this compile? (Handing this-Reference to base class)
我使用多重继承,一个基类(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
的引用来绑定
相关文章:
- 表示"accepting anything for this template argument" C++概念的通配符
- 为什么使用 "this" 指针调用派生成员函数?
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- Visual Studio Code "undefined reference to `WinMain@16'"
- 使用 MATLAB 编码器生成C++代码:编译错误"undefined reference to `rgb2gray_tbb_real64'"
- C++错误:"error: int aaa::bbb is protected within this context"
- 我可以将调用类的"this"传递给 lambda 函数吗?
- 使用 [] 运算符时"binding reference of type discards qualifiers"
- 为什么创建友元类的实例会导致"undefined reference to"错误?
- 创建具有 new in 函数和"this is nullptr"异常的对象
- 关于C++中具有多重继承"this"指针的说明
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 在noexcept 规范中是否允许使用"this"?
- 如何修复"error: ‘_1’ was not declared in this scope"?
- Tensorflow c++ api undefined reference to 'tflite::D efaultErrorReporter()'
- C++调用具有 *this 属性的单个帮助程序函数
- 不断"Attempting to reference a deleted function"
- Doees the 'this' 指针参与虚函数的多态行为
- 什么是"rvalue reference for *this"?
- c++:为什么可以编译?(处理this-Reference到基类)