gpt4 book ai didi

c++ - 引用/对象的静态/动态转换

转载 作者:搜寻专家 更新时间:2023-10-31 00:19:10 24 4
gpt4 key购买 nike

前段时间我在和一群类型转换运算符(operator)一起玩,显然我当时并没有真正了解。我现在正在查看我的代码,我看到了这个:

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

感谢 very good answer,我想我现在对指针和引用的转换有了更好的理解在 stackoverflow 上,但现在涉及到对象。将引用强制转换为对象时到底发生了什么?或者如果 p_derived 是对象本身而不仅仅是一个引用怎么办?它会创建新对象吗?如果是,这些对象将如何实例化?

我也很惊讶这完全可以被编译,因为在找到这段代码的 Base.h 中,Derived 只是前向声明的,这意味着它不应该知道它实际上是从 Base 派生的。我尝试在另一个地方进行从 Derived* 到 Base* 的静态转换,但由于就翻译单元而言类型不兼容,这将无法编译。

最佳答案

当您使用引用时,通常实际上是在使用它引用的对象。这就是引用语法的神奇透明性,这是您无法通过指针获得的;可以说这是他们存在的理由。

这种情况也不异常(exception):您正在使用 p_derived 裁判并构建一个新的Base通过切片从中分离出来。

static_cast<Base&>(p_derived)将转换引用本身,如果这就是您所追求的(即使不是 :P)。

I'm also surprised that this could be compiled at all since in Base.h, where this code is found, Derived is only forward declared meaning it shouldn't know that it actually derives from Base.

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

关于c++ - 引用/对象的静态/动态转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8892604/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com