std::experimental::static_pointer_cast, std::experimental::dynamic_pointer_cast, std::experimental::const_pointer_cast, std::experimental::reinterpret_pointer_cast

template< class T, class U >

std::experimental::shared_ptr<T>

    static_pointer_cast( const std::experimental::shared_ptr<U>& r ) noexcept;
(1) (库基础 TS)
template< class T, class U >

std::experimental::shared_ptr<T>

    dynamic_pointer_cast( const std::experimental::shared_ptr<U>& r ) noexcept;
(2) (库基础 TS)
template< class T, class U >

std::experimental::shared_ptr<T>

    const_pointer_cast( const std::experimental::shared_ptr<U>& r ) noexcept;
(3) (库基础 TS)
template< class T, class U >

std::experimental::shared_ptr<T>

    reinterpret_pointer_cast( const std::experimental::shared_ptr<U>& r ) noexcept;
(4) (库基础 TS)

创建 std::experimental::shared_ptr 的新实例,其所存储的指针从 r 的存储指针使用转型表达式获得。如果 r 为空,则 shared_ptr 也为空(但其所存储的指针不必为空)。

否则,新的 shared_ptr 将与 r 共享所有权,但当 dynamic_pointer_cast 所实施的 dynamic_cast 返回空指针时为空。

Ytypename std::experimental::shared_ptr<T>::element_type,则所得 std::experimental::shared_ptr 中存储的指针将由以下调用获得(按相应顺序):

1) static_cast<Y*>(r.get())
2) dynamic_cast<Y*>(r.get())(如果 dynamic_cast 的结果为空指针值,则返回的 shared_ptr 为空)。
3) const_cast<Y*>(r.get())
4) reinterpret_cast<Y*>(r.get())

除非从 U*T* 的转型良构,否则这些函数的行为未定义:

1) 除非 static_cast<T*>((U*)nullptr) 良构,否则行为未定义。
2) 除非 dynamic_cast<T*>((U*)nullptr) 良构,否则行为未定义。
3) 除非 const_cast<T*>((U*)nullptr) 良构,否则行为未定义。
4) 除非 reinterpret_cast<T*>((U*)nullptr) 良构,否则行为未定义。

参数

r - 要转换的指针

示例

参阅

构造新的 shared_ptr
(公开成员函数)
应用 static_castdynamic_castconst_castreinterpret_cast 到被存储指针
(函数模板)