【发布时间】:2017-11-15 15:02:53
【问题描述】:
static_cast 向下转换有效吗?
// non-virtual, may be non-trivially copyable
struct Base{
int m_object;
};
// Derived class have only non-virtual functions
struct A : Base{
void arggh(){
std::cout << "Arrghh " << m_object;
}
};
int main() {
Base base{190};
A& a = static_cast<A&>(base);
a.arggh();
return 0;
}
我的意思是,创建基类,然后转换为派生类。
【问题讨论】:
-
不,
Base类型的对象不是A类型的对象 -
只是好奇,你为什么要这样做?
-
你应该做反转 Base* b = new A();并且您拥有的所有常用方法都应该是“虚拟的”。这就是你处理它的方式,这就是有一个指定合同的接口的原因。
-
@miradham Wel...... 我发现自己处于开始编写代理对象的情况,我可以轻松地重新创建它(它只有 1 个 ptr)。然后我需要 Proxy + 一些数据......然后我想这真是太糟糕了...... :) 很难用两个词来解释。
-
@appleapple 不完全是 - 这是非虚拟类。
标签: c++