std::experimental::static_pointer_cast, std::experimental::dynamic_pointer_cast, std::experimental::const_pointer_cast, std::experimental::reinterpret_pointer_cast
来自cppreference.com
<tbody>
</tbody>
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 返回空指针时为空。
令 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 到被存储指针 (函数模板) |