定义于头文件 <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 起) ...
// static_pointer_cast example #include <iostream> #include <memory> struct A { static const char* static_type; const char* dynamic_type; A() { std::cout << "construct A " << std::endl; dynamic_type = static_type; } }; struct B: A { static const char* static_type; B() {...
template< class T, class U > std::shared_ptr<T> static_pointer_cast( const std::shared_ptr<U>& r ) noexcept { auto p = static_cast<typename std::shared_ptr<T>::element_type*>(r.get()); return std::shared_ptr<T>(r, p); } 版本二 template< class T, class U > std::sh...
std::shared_ptr<T>reinterpret_pointer_cast(std::shared_ptr<U>&&r)noexcept; (8)(C++20 起) 创建std::shared_ptr的新实例,其存储指针从r的存储指针用转型表达式获得。 若r为空,则新的shared_ptr亦然(但其存储指针不必为空)。否则,新的shared_ptr将与r的初始值共享所有权,但若dynamic_pointer_cast所进...
1、std::static_pointer_cast():当指针是智能指针时候,向上转换,用static_cast 则转换不了,此时需要使用static_pointer_cast。 2、std::dynamic_pointer_cast():当指针是智能指针时候,向下转换,用dynamic_cast 则转换不了,此时需要使用dynamic_pointer_cast(此处注意:base基类需要至少有一个virtual成员函数(即多态类...
首先,我们需要了解static_pointer_cast的语法和语义。它的语法形式如下: ```cpp static_pointer_cast<T>(p); ``` 其中,T是目标类型,p是待转换的指针或引用。static_pointer_cast的语义是执行一次类型转换,将p转换为T类型的指针或引用。 在源码解析之前,我们需要了解C++的类型系统和编译器实现。C++的类型系统包...
std::weak_ptr<FMP4MediaSource> weak_self = std::static_pointer_cast<FMP4MediaSource>(shared_from_this()); _ring = std::make_shared<RingType>(_ring_size, [weak_self](int size) { auto strong_self = weak_self.lock(); if (!strong_self) {6...
template <class Ty, class Other> shared_ptr<Ty> static_pointer_cast(const shared_ptr<Other>& sp); 参数 Ty 返回的共享指针控件的类型。 Other 参数控制的类型共享指针。 Other 参数共享指针。 备注 模板函数返回空的情况对象 sp 是否为空 shared_ptr 对象;否则它返回拥有资源。sp拥有的shared_ptr Class<...
以下是std :: static_pointer_cast的声明。 template <class T, class U> shared_ptr<T> static_pointer_cast (const shared_ptr<U>& sp) noexcept; C++11 template <class T, class U> shared_ptr<T> static_pointer_cast (const shared_ptr<U>& sp) noexcept; ...
assert:这是定义在<cassert>或<assert.h>头文件中的宏。它用于运行时断言。 因此,当您使用assert时,需要包含相应的头文件。而使用static_assert时,不需要任何特定的头文件。 通过这两种断言,我们可以确保代码在编译时和运行时都满足我们的预期。 1.2.2 断言与人的直觉 ...