前段时间,我正在和一群演员操作,这显然我当时并没有真正掌握。现在,我一直在寻找在我的代码,我看到了这一点:引用/对象的静态/动态转换
Base(Derived &p_derived) : m_state(static_cast<Base>(p_derived).m_state){}
我想我现在已经有了进一步的认识指针和感谢引用到very good answer这里计算器铸造的,但现在有介入的对象。当引用被转换为对象时究竟发生了什么?或者,如果p_derived是对象本身而不仅仅是一个引用呢?它会创造新的对象吗?如果是的话,这些会如何被立即执行?
我也很惊讶这可以编译,因为在Base.h中找到了这个代码,Derived只是前向声明的意思,它不应该知道它实际上是从Base派生的。我试图在另一个地方做一个从Derived *到Base *的静态类型转换,但是由于类型与该转换单元有关不兼容,所以它不会被编译。
所以你说“static_cast (d)”,无论d是引用还是对象,基本上都与“Base b; b = d;”在这种情况下?不,它更像这样:http://codepad.org/8bn2MxAl –
user1130005
2012-01-17 10:10:14
@ user1130005:这就是我所说的。你想用这些代码实现什么?为什么不'm_state(static_cast (p_derived.m_state.get()))'或类似? –
2012-01-17 10:21:45
是的,我应该明确地解决它。我有几个派生自Base的类,它用作派生类之间共享状态的接口,这就是为什么我需要传入一个对象(可能Base和会更好),以获取它对Base的私有状态。我试图将Java代码转换为C++,Java允许各种疯狂的依赖关系。这就是我遇到这些问题的原因。至于为什么允许static_cast,我仍然好奇。它允许在C++中执行“A a; B b; a = b;”即使A和B没有共同之处? – user1130005 2012-01-17 10:47:35