1、std::static_pointer_cast():当指针是智能指针时候,向上转换,用static_cast 则转换不了,此时需要使用static_pointer_cast。 2、std::dynamic_pointer_cast():当指针是智能指针时候,向下转换,用dynamic_cast 则转换不了,此时需要使用dynamic_pointer_cast(此处注意:base基类需要至少有一个virtual成员函数(即多态类...
不用std::static_pointer_cast // static_pointer_cast example #include <iostream> #include <memory> struct A { static const char* static_type; const char* dynamic_type; A() { dynamic_type = static_type; } }; struct B: A { static const char* static_type; B() { dynamic_type = sta...
首先,我们需要了解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...
模板函数的情况下返回空 sp 对象是否是一个空 shared_ptr 对象;否则返回的资源由 spshared_ptr 类拥有的<Ty> 对象。 static_cast<Ty*>(sp.get()) 绑定表达式是有效的。 示例 // std_tr1__memory__static_pointer_cast.cpp // compile with: /EHsc #include <memory> #include <iostream> struct base ...
回忆函数指针的用法: //type1是函数的返回值的类型,没有返回值就是void;type2和type3是传参var1和var3的类型。 //通过f_pointer系列指向原函数的地址&,然后直接调用函数指针+传参。 type1 *f_pointer_with_args (type2 var2, type3 var3) = &f_with_args; f_pointer_with_args(value1, value2)...
(1)static_cast 用法:static_cast < type-id > ( exdivssion ) 该运算符把exdivssion转换为type-id类型,但没有运行时类型检查来保证转换的安全性。它主要有如下几种用法: ①用于类层次结构中基类和子类之间指针或引用的转换。 a. 进行上行转换(把子类的指针或引用转换成基类表示)是安全的; ...
c) 可以把空指针转换成目标类型的空指针(null pointer)。 d) 把任何类型的表达式转换成void类型。 注意:static_cast不能转换掉expression的const、volitale或者__unaligned属性。 2) dynamic_cast(带类型检查的转换--运行时检查) 用法:dynamic_cast <typeid> (expression) ...
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所进...