std::experimental::static_pointer_cast, std::experimental::dynamic_pointer_cast, std::experimental::const_pointer_cast, std::experimental::reinterpret_pointer_cast
来自 cppreference.cn
< cpp | experimental | shared ptr
template< class T, class U > std::experimental::shared_ptr<T> |
(1) | (library fundamentals TS) |
template< class T, class U > std::experimental::shared_ptr<T> |
(2) | (library fundamentals TS) |
template< class T, class U > std::experimental::shared_ptr<T> |
(3) | (library fundamentals TS) |
template< class T, class U > std::experimental::shared_ptr<T> |
(4) | (library fundamentals 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 应用于存储的指针 (函数模板) |