1、std::static_pointer_cast():当指针是智能指针时候,向上转换,用static_cast 则转换不了,此时需要使用static_pointer_cast。 2、std::dynamic_pointer_cast():当指针是智能指针时候,向下转换,用dynamic_cast 则转换不了,此时需要使用dynamic_pointer_cast(此处注意:base基类需要至少有一个virtual成员函数(即多态类...
int* pi=const_cast<int*>(&ci); int* intPtr=nullptr; char* charptr=reinterpret_cast<char*>(intptr); int i = 42; double d = static_cast<double>(i); int i=42 double d=static_cast<double>(i); 在C++中,当函数参数是引用类型时,直接传递变量实例(而非变量的地址)是正常的使用方式,这不...
static_point_cast 是一种用于智能指针类型间的编译时强制转换的工具,它的用法与 static_cast 类似,但专门用于智能指针。它不会在运行时进行检查,适用于你明确知道对象类型并且类型转换不会失败的场景。static_point_cast 主要用于在继承层次中进行从基类智能指针到派生类智能指针的转换。
static_cast : 常用于基本数据类型的转换、非const转成const,不是同一继承体系的,无法转换 dynamic_cast :一般用于多态类型的转换,有运行时安全检测 reinterpret_cast:属于比较底层的强制转换,没有任何类型检查和格式转换,仅仅是简单的二进制数据拷贝 const_cast : 去除const constPerson*p1=newPerson();Person*p2=c...
智能指针的cast 使用static_pointer_cast、dynamic_pointer_cast、const_pointer_cast、reinterpret_pointer_cast进行shared_ptr进行cast 对于unique_ptr却没有定义相应的方法,对于想转换unique_ptr指针,可以使用get方法,即dynamic_cast<pointerOfUnique_ptr.get()>的方法进行cast 本文使用 Zhihu On VSCode 创作并发布 ...
1) static_cast:和C风格转换相似可做值的强制转换,或指针的父类到子类的明确的向上转换; 2) const_cast:移除const属性; 3) reinterpret_cast:指针类型和整型或其他指针间不安全的相互转换,仅在你对所做一切了然于心时使用; 4) dynamic_cast:除测试外不要使用,除单元测试外,如果你需要在运行时确定类型信息,说...
static_cast静态类型转换: 1、void* 转换为任意类型的指针 2、任意类型的指针转换为void* 3、编译器允许的跨类型转换,比如char类型转换为int类型,double转int型 4、做基类与派生类的转换,派生类转换成基类是安全的,基类转换成派生类是不安全的,因为往往子类的内容比父类多。static_cast不提供安全性检查 ...
智能指针之间可以通过reset、get、static_pointer_cast、dynamic_pointer_cast等方法进行转换。 reset:重置智能指针并使它指向新的对象。 get:获取智能指针所管理的对象的裸指针。 static_pointer_cast:进行静态类型转换。 dynamic_pointer_cast:进行动态类型转换。 下面通过代码示例来演示智能指针的转换: #include <iostre...
从技术上讲,智能指针实际上并不需要存储特定类型的接口指针,但可以改为只存储一个 IUnknown 接口指针,不过在智能指针取消引用的任何时候,智能指针都将不得不依赖 static_cast。这可能是有用且从概念上讲是危险的,但我将在以后的专栏中对此进行讨论。现在,我将从用于存储强类型化指针的基本类模板开始:...
std::cout<<"Create smart pointer at "<<static_cast<constvoid*>(p)<<std::endl; /*智能指针指向类T,引用计数加1*/ if(mPointer)mPointer->incRefCount(); } // 析构函数 ~SmartPointer(){ std::cout<<"Release smart pointer at "<<static_cast<constvoid*>(mPointer)<<std::endl; ...