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

part-02 C++知识总结(类型转换)

一.C++常用的类型转换函数

在C++中,有几种自带的类型转换函数可以用于不同类型之间的转换。以下是其中一些常用的自带类型转换函数:

1.隐式转换(Implicit Conversion)

数字类型之间的隐式转换,例如将int转换为floatdouble等。

派生类指针向基类指针的隐式转换。

2.显式转换(Explicit Conversion)

C风格的强制类型转换:使用(type)value,例如(int)3.14将浮点数转换为整数。

函数样式的强制类型转换:使用type(value),例如int(3.14)也可以将浮点数转换为整数。

 

3.const_cast:用于去除const和volatile属性

const_cast<type>(expression),例如const_cast<int*>(ptr)可以去除指针ptr的const属性。

 

4.static_cast用于静态类型转换(大多数常见的转换操作都可以使用static_cast完成)。

static_cast的语法:
static_cast<目标类型>(表达式)

 

1.基本数据类型之间的转换

int a = 42;
double b = static_cast<double>(a);

 2.子类指针向基类指针的转换

class A{
}
class B:public:A{
}B*b=new B();
A*a=static_cast<A*>(b);

 注意:这种转换只在派生类转换到基类中有效

 

3.空指针的类型转换

int* ptr = static_cast<int*>(nullptr);

尽管nullptr本身就是空指针的字面值,但在某些上下文中,编译器可能无法推断出需要的指针类型。因此,通过使用static_cast进行强制转换,可以明确告诉编译器将nullptr转换为int*类型的指针。

这通常在以下情况下使用:

  1. 当需要将一个空指针赋值给一个特定类型的指针变量时,例如在初始化指针或进行复制/赋值操作时。
  2. 当调用期望接受特定类型指针参数的函数时,可以将nullptr转换为该类型的指针并传递给函数。

需要注意的是,在使用static_castnullptr转换为指针类型时,请确保目标指针类型是有效的,并且可以安全地使用它来执行后续操作,以避免未定义行为。

4.强制转换为枚举类型

enum class Color {RED,GREEN,BLUE 
};
int value = 1;
Color color = static_cast<Color>(value);

这里将 int 类型的 value 转换成了 枚举类型Color。

5.dynamic_cast用于在继承层次结构中进行安全的向下转型。

dynamic_cast<type>(expression),例如dynamic_cast<Derived*>(basePtr)将基类指针basePtr转换为派生类指针。

 

6.reinterpret_cast用于进行不相关类型之间的转换,通常用于将指针或引用重新解释为其他类型。

reinterpret_cast<type>(expression),例如reinterpret_cast<int*>(ptr)将指针ptr转换为整型指针。

 

需要注意的是,在使用类型转换函数时要小心潜在的风险和副作用。应确保转换操作是安全和合理的,并避免滥用类型转换。

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

相关文章:

  • stable diffusion实践操作-图生图
  • Jtti:Ubuntu18.04如何修改远程ssh端口号
  • 微软表示Visual Studio的IDE即日起开启“退休”倒计时
  • 好马配好鞍:Linux Kernel 4.12 正式发布
  • element——switch接口成功后赋值打开开关
  • WPF Border设置渐变色
  • SAP_ABAP_OLE_EXCEL批导案例
  • MySQL以及版本介绍
  • stm32 iap sd卡升级
  • D358周赛复盘:哈希表模拟⭐⭐+链表乘法翻倍运算(先反转)⭐⭐⭐
  • java八股文面试[数据库]——索引的基本原理、设计原则
  • 2023年京东方便食品行业数据分析(京东数据报告)
  • 无涯教程-Android - Style Demo Example函数
  • 【算法训练-字符串 二】最长回文子串
  • 结合OB Cloud区别于MySQL的4大特性,规划降本方案
  • 题目有点太简单了,不知道怎么选了
  • Bug:mac上运行go run main.go 报错,fork/exec /var/fold/T/go-build269/b001/ex
  • CSRF与XSS结合利用
  • 【爬虫】实验项目一:文本反爬网站的分析和爬取
  • DEAP库文档教程二-----创建类型
  • Axure RP美容美妆医美行业上门服务交互原型图模板源文件
  • 【SpringBoot】用SpringBoot代码详细解释<List>的用法
  • HRS--人力资源系统(Springboot+vue)--打基础升级--(六)分页查询 + 重置按钮
  • JavaScript设计模式(二)——简单工厂模式、抽象工厂模式、建造者模式
  • DEAP库文档教程五----计算统计
  • 新型安卓恶意软件使用Protobuf协议窃取用户数据
  • 【AI数字人】如何基于DINet+Openface自训练AI数字人
  • Stable Diffusion 多视图实践
  • 【实操干货】如何开始用Qt Widgets编程?(四)
  • 解决window安装docker报错问题