int*non_const_ptr=const_pointer_cast<int*>(const_ptr); 在上述示例中,我们将一个const限定的指针const_ptr转为了非const限定的指针non_const_ptr。通过这种方式,我们可以在后续的代码中修改non_const_ptr指向的对象,而const_ptr仍然保有原来的const限定。 修改 constint*const_ptr=newint(10); int*non_cons...
1、std::static_pointer_cast():当指针是智能指针时候,向上转换,用static_cast 则转换不了,此时需要使用static_pointer_cast。 2、std::dynamic_pointer_cast():当指针是智能指针时候,向下转换,用dynamic_cast 则转换不了,此时需要使用dynamic_pointer_cast(此处注意:base基类需要至少有一个virtual成员函数(即多态类...
template <class Ty, class Other> shared_ptr<Ty> const_pointer_cast(const shared_ptr<Other>& sp); 参数 Ty 返回的共享指针控制的类型。 Other 参数控制的类型共享指针。 Other 共享指针参数。 备注 模板函数的情况下返回空 const_cast<Ty*>(sp.get()) 对象是否返回 null 指针;否则返回的资源由 spsha...
这个是专门用来操作low-level的const的,并且只能是这三种类型上的const语义:reference, pointer-to-object, or pointer-to-data-member。我们来看看下面的例子: int gemfield = 7030; int& r = gemfield; const int& r2 =const_cast<const int&>(r); const_cast可以加上low-level的const语义,如上面所述;也...
否则,新的shared_ptr将与r,但如果dynamic_cast由dynamic_pointer_cast返回空指针。 让Y成typenamestd::shared_ptr<T>::element_type,然后产生的std::shared_ptr%27s存储的指针将通过按%29的顺序调用%28获得: 1%29static_cast<Y*>(r.get())... 2%29dynamic_cast<Y*>(r.get())%28如果结果为dynamic_cas...
在进行下行转换时,dynamic_cast具有类型检查的功能,比static_cast更安全。 class B{ public: int m_iNum; virtual void foo(); }; class D:public B{ public: char *m_szName[100]; }; void func(B *pb){ D *pd1 = static_cast(pb);
在进行下行转换时,dynamic_cast具有类型检查的功能,比static_cast更安全。 class B{ public: int m_iNum; virtual void foo(); }; class D:public B{ public: char *m_szName[100]; }; void func(B *pb){ D *pd1 = static_cast(pb);
std::shared_ptr<T> static_pointer_cast( const std::shared_ptr<U>& r ) noexcept; (1) (C++11 起) template< class T, class U >std::shared_ptr<T> static_pointer_cast( std::shared_ptr<U>&& r ) noexcept; (2) (C++20 起) template< class T, class U >std::shared_ptr<T> ...
否则,新的 shared_ptr 将与r 的初始值共享所有权,但若 dynamic_pointer_cast 所进行的 dynamic_cast 返回空指针,则它为空。 令Y 为typename std::shared_ptr<T>::element_type,则将分别通过求值下列表达式,获得所得 std::shared_ptr 的存储指针: 1,2) static_cast<Y*>(r.get())...
static_cast还可以将一个左值转换为右值引用,介绍可以参阅 例如: 将非const对象转换为const对象(但是不能将底层const对象转换为非const对象,这个只有const_cast才能做到) 将int转换为double,反之亦然 也可以将void*指针转换为其他类型指针,将pointer-to-base转换为pointer-to-derived ...