C++的类型转换

static_cast 转换

隐式类型转换

c 复制代码
 int x = 0;   
 long y = static_cast<long> (x);

reinterpret_cast 转换

显示类型转换

c 复制代码
int* px = &x;
int p = reinterpret_cast<int>(px);

const_cast 转换

在有不同 cv 限定的类型间转换。通常用于 const 属性转非 const 属性

c 复制代码
int a = 1;
//int* pa = (int*)&a;
int* pa = const_cast<int*>(&a);      
(*pa)++;      
cout << "a: " << a << endl;                         
cout<<"*pa: " << *pa; 

dynamic_cast 转换

沿继承层级向上、向下及侧向,安全地转换到其他类的指针和引用。

父类类型的指针转换为子类类型的指针或引用时,可能会发生越界,如下图所示

dynamic_cast 强转时,父类要有虚函数

如果未能转换成功,返回空

c 复制代码
class A
{
public :
virtual void f(){}
};
class B : public A
{};
void fun (A* pa)
{
// dynamic_cast会先检查是否能转换成功,能成功则转换,不能则返回
B* pb1 = static_cast<B*>(pa);
B* pb2 = dynamic_cast<B*>(pa);
cout<<"pb1:" <<pb1<< endl;
cout<<"pb2:" <<pb2<< endl;
}
int main ()
{
  A a;
  B b;
  fun(&a);
  fun(&b);
  return 0;
}
相关推荐
qeen8712 分钟前
【数据结构】建堆的时间复杂度讨论与TOP-K问题
c语言·数据结构·c++·学习·
图码23 分钟前
如何用多种方法判断字符串是否为回文?
开发语言·数据结构·c++·算法·阿里云·线性回归·数字雕刻
handler0131 分钟前
Linux 内核剖析:进程优先级、上下文切换与 O(1) 调度算法
linux·运维·c语言·开发语言·c++·笔记·算法
zhouwy11336 分钟前
Linux进程与线程编程详解
linux·c++
A7bert7772 小时前
【YOLOv8pose部署至RDK X5】模型训练→转换bin→Sunrise 5部署
c++·python·深度学习·yolo·目标检测
li1670902702 小时前
第二十七章:智能指针
c语言·数据结构·c++·visual studio
王老师青少年编程3 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【贪心与二分判定】:数列分段 Section II
c++·算法·贪心·csp·信奥赛·二分判定·数列分段 section ii
zh_xuan3 小时前
libcurl调用https接口
c++·libcurl
就叫飞六吧3 小时前
QT写一个桌面程序exe并动态打包基本流程(c++)
开发语言·c++
蜡笔小马3 小时前
1.c++设计模式-工厂模式
c++