Namespaces
Variants

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

From cppreference.net
std::experimental::shared_ptr
Member functions
Non-member functions
experimental::static_pointer_cast experimental::dynamic_pointer_cast experimental::const_pointer_cast experimental::reinterpret_pointer_cast
Members and non-members identical to those of std::shared_ptr
template < class T, class U >

std:: experimental :: shared_ptr < T >

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

std:: experimental :: shared_ptr < T >

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

std:: experimental :: shared_ptr < T >

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

std:: experimental :: shared_ptr < T >

reinterpret_pointer_cast ( const std:: experimental :: shared_ptr < U > & r ) noexcept ;
(4) (库基础技术规范)

创建一个新的 std::experimental::shared_ptr 实例,其存储指针通过强制转换表达式从 r 的存储指针获取。如果 r 为空,则新的 shared_ptr 也为空(但其存储指针不一定为 null)。

否则,新的 shared_ptr 将与 r 共享所有权,除非 dynamic_pointer_cast 执行的 dynamic_cast 返回空指针,此时新指针将为空。

Y typename 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_cast dynamic_cast const_cast reinterpret_cast
(函数模板)