定义于头文件 <memory> template< class T, class U >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 起) ...
注:由于std::bad_cast类型定义在typeinfo头文件中,需要#include<typeinfo>;另外,对于菱形非virtual继承、非public继承,转换引用时也会抛出std::bad_cast异常 当我们用“裸”指针进行类层次上的上下行转换时,可以使用dynamic_cast。当然我们也可以使用static_cast,只是dynamic_cast在进行下行转换的时候(即基类到派生类...