引用/对象的静态/动态转换

时间:2012-01-17 09:56:44

标签: c++ object casting reference

前一段时间我和一群演员一起玩,显然我当时并没有真正得到它。我现在正在查看我的代码,我看到了这个:

Base(Derived &p_derived) : m_state(static_cast<Base>(p_derived).m_state){}

我认为我现在已经更好地理解了指针和引用的转换,感谢stackoverflow上的very good answer,但现在涉及到对象。将引用转换为对象时会发生什么?或者如果p_derived是对象本身而不仅仅是一个引用呢?是否会创建新对象?如果是这样,它们将如何实现?

我也很惊讶这可以编译,因为在Base.h中找到了这个代码,Derived只是前向声明意味着它不应该知道它实际上是从Base派生的。我尝试在另一个地方进行从Derived *到Base *的静态强制转换,但由于类型与翻译单元不相容,因此不能编译。

1 个答案:

答案 0 :(得分:6)

当您使用引用时,通常实际上使用它引用的对象。这是你用指针得不到的参考语法的神奇透明度;可以说这是他们存在的理由。

此方案也不例外:您正在使用p_derived 裁判并通过切片构建新的Base

static_cast<Base&>(p_derived)会投射引用本身,如果这就是你所追求的(即使它不是:P)。

  

我也很惊讶这可以编译,因为在Base.h中找到了这个代码,Derived只是前向声明意味着它不应该知道它实际上是从Base派生的。

是的,这也让我感到惊讶。你确定吗? (Demo / Demo - 不确定您使用的是哪种方式)