当前位置: 首页 > news >正文

C++中的四种类型转换(Type Casting)方式

在C++中,有四种常见的类型转换(Type Casting)方式,它们分别是:

一、静态转换(Static Cast):

static_cast是最常见的类型转换方式,用于基本数据类型的转换、非多态类型之间的转换以及显示地转换指针或引用类型。
它在编译时进行类型检查,无需运行时支持,因此效率较高,但类型安全性需要由程序员负责。
静态转换不能用于多态类型的向上转换或向下转换(需要使用动态转换)。

示例代码:

int num = 10;
double converted = static_cast<double>(num);int intValue = 65;
char charValue = static_cast<char>(intValue);Base* basePtr = new Derived();
Derived* derivedPtr = static_cast<Derived*>(basePtr);

二、动态转换(Dynamic Cast):

dynamic_cast用于处理多态类型的转换(指向基类的指针或引用)。
它在运行时进行类型检查,用于安全地进行向上转换和向下转换。如果转换无效,它返回空指针(对指针)或引发std::bad_cast异常(对引用)。
使用动态转换需要将基类声明为多态类型(至少一个虚函数)。

示例代码:

class Base
{
public:virtual ~Base() {}
};class Derived : public Base
{
public:void someFunction() {}
};Base* basePtr = new Derived();// 向下转换
Derived* derivedPtr = dynamic_cast<Derived*>(basePtr);
if (derivedPtr != nullptr)
{// 转换成功derivedPtr->someFunction();
}
else
{// 转换失败std::cout << "Dynamic cast failed.\n";
}

三、重新解释转换(Reinterpret Cast):

reinterpret_cast用于低级别的类型转换,可以将指针或引用转换为其他类型的指针或引用,即使这种转换在类型间没有实际关联。
它能够将一个指针转换为一个整数类型,或将一个整数类型转换为一个指针。
它是一种危险的转换方式,需要慎重使用,并且通常用于处理底层的编程场景。

示例代码:

int num = 10;
int* numPtr = &num;
intptr_t address = reinterpret_cast<intptr_t>(numPtr);int intValue = 65;
char* charPtr = reinterpret_cast<char*>(&intValue);

四、常量转换(Const Cast):

const_cast用于移除对象的常量性(const)或添加常量性。
通常用于去除函数的常量性,以便对其进行修改。
值得注意的是,使用const_cast去除常量性并修改一个本来就是常量的变量是未定义行为,这可能导致意外结果。

示例代码:

const int num = 10;
int* mutablePtr = const_cast<int*>(&num);
*mutablePtr = 20; // 未定义行为const char* constantStr = "Hello";
char* mutableStr = const_cast<char*>(constantStr);
mutableStr[0] = 'h';

这些示例代码用于展示各种转换方式的用法,并不代表在所有情况下都是适当的。在实际应用中,请谨慎选择和使用类型转换,以确保类型安全和正确性。

http://www.lryc.cn/news/122851.html

相关文章:

  • Linux系列:从0到1用Docker部署springboot项目
  • zabbix监控mysql数据库、nginx、Tomcat
  • 深入探索二叉树算法:理解、构建和应用C语言
  • (css)点击前隐藏icon图表 点击后显示
  • Tomcat的动静分离以及多实例部署
  • uniapp+vue3项目中使用vant-weapp
  • WordPress:实现发布文章自动添加TAG标签
  • ubuntu下FFmpeg安装和使用以及CMakeLists.txt模板
  • 数据结构顺序表和链表(超详细)
  • free 查看 buff/cache 很大,处理方法
  • 【Quarkus技术系列】「云原生架构体系」在云原生时代下的Java“拯救者”是Quarkus,那云原生是什么呢?
  • DHCP的工作原理
  • display:flex;兼容浏览器写法
  • 三、python Django ORM postgresql[数据定时备份、数据恢复]
  • c++字符串函数
  • 使用OkHttp发送POST请求的几种方式
  • 时序预测 | MATLAB实现EEMD-GRU、GRU集合经验模态分解结合门控循环单元时间序列预测对比
  • 学习笔记整理-JS-04-流程控制语句
  • stable-diffusion-webui 界面汉化
  • 问道管理:信创概念走势活跃,恒银科技斩获四连板
  • centos 7镜像(iso)下载图文教程(超详细)
  • 使用Druid,以jdbc方式配置多数据源
  • RabbitMQ基础(2)——发布订阅/fanout模式 topic模式 rabbitmq回调确认 延迟队列(死信)设计
  • 2. VisionOS平台概述
  • MySql存储过程详解
  • CRM 系统实施风险分析
  • 保持城市天际线(力扣)贪心 JAVA
  • 电路综合原理与实践---T衰减与PI衰减的详细计算理论与设计仿真
  • 1. 基于UDP的TFTP文件传输
  • django中使用bootstrap-datepicker时间插件