6 c++ dynamic-cast reference auto c++11
使用auto和dynamic_cast时,我遇到了一个非常奇怪的行为.这是我有的课程:
class BaseInterface {
public:
virtual void someMethod()=0;
};
class Derived:public BaseInterface {
public:
virtual void someMethod1()=0;
void someMethod()override;
};
Run Code Online (Sandbox Code Playgroud)
当然,有一些类实现了所有派生方法.
然后有第三个类看起来像这样:
class ThirdClass {
public:
void demoMethod(BaseInterface&);
void anotherMethod(Derived&);
};
void ThirdClass::demoMethod(BaseInterface& obj) {
auto buffer=dynamic_cast<Derived&>(obj);
anotherMethod(buffer);
}
Run Code Online (Sandbox Code Playgroud)
当我用gcc编译它时,我得到一个"无法分配抽象类型的对象"错误.而当我更换
auto buffer=...
Run Code Online (Sandbox Code Playgroud)
同
Derived& buffer=...
Run Code Online (Sandbox Code Playgroud)
一切都很好.为什么会这样?自动没有推断出正确的类型或什么?
我还发现了一个仍然使用auto的肮脏技巧:
void ThirdClass::demoMethod(Base& obj) {
auto buffer=dynamic_cast<Derived*>(&obj);
anotherMethod(*buffer);
}
Run Code Online (Sandbox Code Playgroud)
你Derived来自auto.请改用:
auto & buffer = dynamic_cast<Derived&>(obj);
Run Code Online (Sandbox Code Playgroud)