gpt4 book ai didi

C++ 转换 Base* 到 Derived* 和常量

转载 作者:搜寻专家 更新时间:2023-10-30 23:59:32 24 4
gpt4 key购买 nike

是从Base*转换过来的至 Derived*总是允许?是从 const Base* 转换而来至 const Derived*总是允许?

我正在使用 Qt QSharedPointers。我有一个指向 Base 的 QSharedPointer对象,我想将其转换为 QSharedPointer 到 Derived目的。我事先检查过 pointee 的类型是 Derived .

是否有可能 100% 成功的机会

  • static_cast<QSP<Derived>>
  • dynamic_cast<QSP<Derived>>
  • 直接投 QSP<Derived>(my_base_pointer)

?

例如,对于直接转换:

QSP<Derived> inpf = QSP<Derived>(my_base_pointer) ;

我有错误

Error 1 error C2440: 'initializing' : cannot convert from 'Base *' to 'Derived *'

my_base_pointer类型 const QSP<Base> .

是因为常量吗?我应该在上面进行 const_cast 吗?我想常量不是根本原因,因为如果我

const QSP<Derived> inpf = static_cast<const QSP<Derived>>(my_base_pointer);

出现同样的错误。

最佳答案

你正在喂 QSP<Derived>构造函数 a Base*指针,这是行不通的。只要你确定指针真的是Derived*你应该能够 static_cast 它:

QSP<Derived> inpf = QSP<Derived>(static_cast<Derived*>(my_base_pointer)) ;

如果基类至少有一个虚函数,使用dynamic_cast会更安全在这种情况下,因为这就是它的创建目的。如果指针实际上不是指向派生类的指针,您将得到一个 NULL 指针。

关于C++ 转换 Base* 到 Derived* 和常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16154538/

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