kir*_*off 2 c++ casting compiler-errors const
从转换Base*到Derived*始终允许吗?从转换const Base*到const Derived*始终允许吗?
我正在使用Qt QSharedPointers.我有一个QSharedPointer Base对象,我想将QSharedPointer转换为Derived对象.我事先检查了指针的类型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吗?我认为constness不是根本原因,因为如果我
const QSP<Derived> inpf = static_cast<const QSP<Derived>>(my_base_pointer);
发生同样的错误.
你正在给QSP<Derived>构造函数一个Base*指针,这将无法工作.只要你确定指针确实是一个Derived*你应该能够static_cast它:
QSP<Derived> inpf = QSP<Derived>(static_cast<Derived*>(my_base_pointer)) ;
如果基类至少有一个虚函数,那么dynamic_cast在这种情况下使用它会更安全,因为它是为它创建的.如果指针实际上不是指向派生类的指针,那么你将得到一个NULL指针.
| 归档时间: | 
 | 
| 查看次数: | 1363 次 | 
| 最近记录: |